Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/317.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从android中的另一个Java文件获取活动中小部件的值_Java_Android_Android Activity - Fatal编程技术网

从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类中视图的值,并将该值传递给另一个。在另一个类中不可能调用视图状态(可能是传递了构造函数)。