我是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建议,但我对界面不熟悉..
答案 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);
}
}