在没有用户界面的情况下创建单独的类

时间:2014-08-31 01:56:39

标签: java android class android-activity

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

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

这是enablemyBluetooth方法是单击按钮

的主要活动
public class MainActivity{
....

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

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

}

现在我创建了一个类,其中我计划在此处执行所有过程而不干预程序的Main活动,就像它在后台运行一样..在我的代码中我只想更改Textview但是当我在我的android上运行它说不幸的是app停止了。

public class BluetoothOn {

private void initializeBlue(){

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

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

如果我想创建一个单独的类,是否真的有必要创建另一个活动?任何人都可以给我提示我应该做什么或宣布什么?请帮忙谢谢。

更新:谢谢你的所有答案,遗憾的是我不能让这个简单的过程在另一个班级上工作......我对Java很新,还在学习我的方式..无论如何这里是我遇到的。

我按照unohu建议的帖子,但它在Main上提供了一个错误“BluetoothOn类型中初始化蓝色()的方法不适用于参数。

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

主要活动:

public class MainActivity extends Activity { 

    public void enableBluetooth (View view){     

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

    }       

}

BluetoothOn课程:

 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建议,但我对界面不熟悉..

3 个答案:

答案 0 :(得分:2)

不,完全没有,你不需要为此做一个单独的活动,实际上你的方法是好的,除了你不应该在活动之外创建接口的成员,比如textview,但是逻辑蓝牙可以在外面或数据库连接等。

如果您尝试在活动之外初始化textView,则最有可能获得异常,而是使用您的课程和活动之间的界面。

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
}
}

答案 1 :(得分:0)

在“活动”中调用findViewById(id)方法,因此只能查找属于该活动布局的视图。

这意味着您无法在未调用该视图的活动中使用特定视图的ID来调用此方法。

为了能够从BluetoothOn课程中获取视图,您应该将活动传递给课程,然后调用findViewById(id)方法:

<强> MainActivity

public class MainActivity{
....

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

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

}

<强> BluetoothOn

public class BluetoothOn {

    private void initializeBlue(Activity activity){

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

答案 2 :(得分:0)

没有。不要创建新活动。只需在调用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);
    }
}