从android中的另一个Java文件获取活动中小部件的值
如何获取从android中的另一个Java文件获取活动中小部件的值,java,android,android-activity,Java,Android,Android Activity,如何获取复选框的值,该复选框位于活动中,并且在其onCreate中有findviewbyId方法 public class abc extends Activity { Checkbox mon; public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.my_xml);
复选框的值,该复选框位于活动中,并且在其onCreate中有findviewbyId
方法
public class abc extends Activity {
Checkbox mon;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.my_xml);
mon = (CheckBox)findViewById(R.id.checkbox_mon);
}
public boolean check()
{
if (mon.isChecked())
return true;
else
return false;
}}
现在,有另一个java类,我在其中传递activity类对象并调用返回值的方法
abc a =new abc();
a.check();
但它不起作用。我认为findviewbyid
语句有问题。
而且,如果没有打开活动,我希望它显示我在xml文件中设置的default值
android:checked="false"
设置一个静态变量并指定复选框的值
:
public class abc extends Activity {
Checkbox mon;
public static boolean checkBoxValue; //here
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.my_xml);
mon = (CheckBox)findViewById(R.id.checkbox_mon);
}
public boolean check()
{
if (mon.isChecked())
checkBoxValue = true; //here
return true;
else
checkBoxValue = false; //here
}}
另一类:
public class AnotherClass {
.....
public boolean value = abc.checkBoxValue;
.......
}
另一种方式
abc活动:
public boolean check()
{
if (mon.isChecked())
Intent intent = new Intent(this, anotherClass.class);
intent.putExtra("value", true);
startActivity(intent);
return true;
.....
.......
另一项活动:
public class AnotherClass extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.anotherclass);
boolean value = getIntent().getBooleanExtra("value");
}
}
带静态修饰符的布尔值就足够了
public static boolean monValue = false // as you mention the default is false
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.my_xml);
mon = (CheckBox)findViewById(R.id.checkbox_mon);
mon.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener {
public void onCheckedChanged(CompoundButton btn, boolean b) {
monValue = b;
}
});
}
然后您只需要在另一个类中boolean x=abc.monValue
。
但我真的想提出另一种在android生命周期内实现类间通信的方法
与
创建包装事件数据的类
public class MyCheckboxEvent {
public final boolean checked;
public MyCheckboxEvent(boolean checked) {
this.checked = checked;
}
}
@Subscribe
public void handleMyAbcCheckbox(MyCheckboxEvent event) {
boolean x = event.checked;
}
然后添加EventBus.getDefault().post(新的MyCheckboxEvent(booleanValue))代码>关于你的abc活动
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.my_xml);
mon = (CheckBox)findViewById(R.id.checkbox_mon);
mon.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener {
public void onCheckedChanged(CompoundButton btn, boolean b) {
EventBus.getDefault().post(new MyCheckboxEvent(b));
}
});
}
在订阅abc
复选框事件数据的任何类上添加处理程序
public class MyCheckboxEvent {
public final boolean checked;
public MyCheckboxEvent(boolean checked) {
this.checked = checked;
}
}
@Subscribe
public void handleMyAbcCheckbox(MyCheckboxEvent event) {
boolean x = event.checked;
}
然后根据生命周期注册和注销订阅服务器
@Override
public void onStart() {
super.onStart();
EventBus.getDefault().register(this);
}
@Override
public void onStop() {
super.onStop();
EventBus.getDefault().unregister(this);
}
abc a=新的abc()代码>意味着创建一个与原始运行活动没有链接的新对象如果我没有运行活动,并且仍然希望获取该复选框的值(期望获得默认值),我应该如何从另一个文件中执行此操作(如果“活动”未运行,那么如果您启动一个“活动”,该值是否明显将false
使用intent将该值发送给另一个类。@W4R10CK您能告诉我如何执行此操作吗?这不会调用函数,因此,变量的值不会更新。@UrviG,我不知道这一点,这不会调用函数?@UrviG,我明白你的意思了。首先检查主java类中视图的值,并将该值传递给另一个。在另一个类中不可能调用视图状态(可能是传递了构造函数)。