【问题标题】:creating a separate class without a user interface创建一个没有用户界面的单独类
【发布时间】:2014-08-31 01:56:39
【问题描述】:

我是 android 开发和 Java 编程的新手。我正在尝试创建一个没有新用户界面的单独类。假设我有一个主要活动,如果我单击一个按钮,它将启动一个类并调用其中的方法并在主要活动上显示文本。

现在我创建了一个 Main 活动和一个名为 BluetoothOn 的类:请查看我的代码:

这是 enablemyBluetooth 方法是按钮单击的主要活动

public class MainActivity{
....

....
public void enablemyBluetooth(View view){             

    BluetoothOn ble = new BluetoothOn();
    ble.initializeBlue();
}

}

现在我创建了一个类,我计划在这里执行所有进程而不干预程序的主要活动,就像它在后台运行一样。在我的代码中,我只想更改 Textview,但是当我在我的 android 上运行它,它说不幸的是应用程序停止了。

public class BluetoothOn {

private void initializeBlue(){

    textView1 =(TextView)findViewById(R.id.textView1);
    textView1.setText(BleisOn);
}
}

请注意,我编译这个程序没有错误/所有变量都被声明了。我试图在 Main 上将蓝牙类创建为私有并且它可以工作。我只想将它创建为包上的另一个类来组织我的代码。

如果我想创建一个单独的类,真的有必要创建另一个活动吗?谁能给我提示我应该做什么或声明?请帮忙谢谢。

更新:感谢您的所有回答,不幸的是,我无法通过这个简单的过程来处理另一个类...我对 Java 还是很陌生,仍在学习我的方式..无论如何,这就是我遇到的。

我关注了 unohu 建议的帖子,但是它在 Main 上向我提供了一个错误,即“BluetoothOn 类型中的 initializeBlue() 方法不适用于参数。

这是一个更完整的类代码:

主要活动:

public class MainActivity extends Activity { 

    public void enableBluetooth (View view){     

    BluetoothOn ble = new BluetoothOn();
    ble.initializeBlue();   // error on this part

    }       

}

蓝牙开启类:

 public class BluetoothOn{

        public TextView textView1;

    public void initializeBlue(View myView){
        String BleisOn = "connect me now";

        textView1 = (TextView)myView.findViewById(R.id.textView1);
        textView1.setText(BleisOn);
    }
}

注意:我在最初的帖子中有错字,我将初始化声明为私有,但它应该是公开的。我正在尝试尝试 luisdurazoa 的建议,但是我对接口不熟悉..

【问题讨论】:

标签: java android class android-activity


【解决方案1】:

不,根本不需要,您不需要单独的活动来执行此操作,实际上您的方法是可以的,除了您不应该在活动之外创建接口的成员,例如 textview,而是蓝牙可以放在外面,或者数据库连接之类的。

如果您尝试在 Activity 之外初始化 textView,而不是在您的类和您的 Activity 之间使用接口,您很可能会遇到异常。

public interface IBluetooth{
    public void initBluetooth();
}

然后……

public class MainActivity implements IBluetooth{
....

....
public void enablemyBluetooth(View view){             

    BluetoothOn ble = new BluetoothOn(this);
}

}

@Override
initBluetooth(){
textView1 =(TextView)findViewById(R.id.textView1);
textView1.setText(BleisOn);
}

您的蓝牙课程...

public class BluetoothOn {

BluetoothOn(IBluetooth callback){
    //this will do the ui operations you need to do in the activity
    callback.initBluetooth();
    //do your stuff here
}
}

【讨论】:

    【解决方案2】:

    没有。不要创建新活动。只需在调用 initializeBlue() 时传递视图对象。采用 (TextView)YourViewObject.findViewById(R.id.textView1) 而不是 BluetoothOn 中的(TextView)findViewById(R.id.textView1)。

    public class MainActivity{
    
    //Declare a textview 
    private TextView textView;
    
     protected void onCreate(Bundle savedInstanceState) {
     .....
      textView =(TextView)myView.findViewById(R.id.textView1);
    ....
     }
    ....
    public void enablemyBluetooth(View view){             
    
        BluetoothOn ble = new BluetoothOn();
    
       //Pass textview as argument
        ble.initializeBlue(textView);
        }
    }
    
    public class BluetoothOn {
    
    private void initializeBlue(View myView){
    
    textView1 =(TextView)myView.findViewById(R.id.textView1);
    textView1.setText(BleisOn);
        }
    }
    

    【讨论】:

    • 您好,我尝试按照您的建议进行操作,但遇到了错误。 public void enableBluetooth (View view){ BluetoothOn ble = new BluetoothOn(); ble.initializeBlue(); // 我在这里遇到错误,方法 initializeBlue 不适用于参数 }
    • 您是否更新了 BluetoothOn.java 中的 private void initializeBlue(View myView) 而不是 private void initializeBlue()?
    • 感谢您的快速回复。是的,我试过了,我更新了我的帖子..请检查它...不知道从哪里继续。
    • 我更新了我的答案..有一个错字...你必须调用 ble.initializeBlue(view);而不是 ble.initializeBlue();在 MainActivity.java
    • 您好,我试过编译,但是当我在 android 上运行它并单击按钮时,我遇到了同样的错误“不幸的是。这个应用程序已停止..
    【解决方案3】:

    findViewById(id) 方法在 Activity 中调用,因此只能找到属于该 Activity 布局的视图。

    这意味着您不能在未声明该 View 的 Activity 中使用特定 View 的 Id 调用此方法。

    为了能够从您的BluetoothOnclass 中获取视图,您应该将 Activity 传递给该类,然后调用 findViewById(id)method:

    MainActivity

    public class MainActivity{
    ....
    
    ....
    public void enablemyBluetooth(View view){             
    
      BluetoothOn ble = new BluetoothOn(this);
      ble.initializeBlue();
     }
    
    }
    

    蓝牙开启

    public class BluetoothOn {
    
        private void initializeBlue(Activity activity){
    
          textView1 =(TextView)activity.findViewById(R.id.textView1);
          textView1.setText(BleisOn);
         }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-23
      • 2012-01-04
      • 2011-07-16
      • 2020-05-30
      • 1970-01-01
      • 2013-11-21
      相关资源
      最近更新 更多