大家好我无法弄明白为什么我无法让它工作,从另一个班级内检查一个活动的CheckBox。
在活动的onCreate方法中,我将自己的引用传递给另一个类
public MainActivity()
...
dbi = new DBPrefsInterface(this);
...
}
public DBPrefsInterface(Context ctx)
{
MainActivity pma = (MainActivity)ctx;
this.ma = pma;
}
现在我尝试检查放置在活动
上的复选框this.ma.cbx.setChecked(true);
但它不起作用。
似乎我没有传递引用,只传递了MainActivity的副本。
感谢adcance
答案 0 :(得分:1)
尝试将处理程序和引用传递给另一个类
的构造函数中的复选框并让处理程序向复选框的原始上下文发送消息
hanlder.post(new Runnable() {
@override
void run {
checkbox.setChecked(true);
}
});
答案 1 :(得分:0)
我不明白你为什么要这样做,但我认为使用以下构造函数可以完成这项工作:
private MainActivity ma;
public DBPrefsInterface(MainActivity a){
ma = a;
}
然后设置复选框(但复选框需要公开才能工作):
ma.cbx.setChecked(true);
答案 2 :(得分:0)
为什么不传入CheckBox本身?因此,您的构造函数变为public DBPrefsInterface(CheckBox cbx)
并且您操纵该引用。
以下是一个简单活动示例:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.checkbox);
CheckBox cbx = (CheckBox) findViewById(R.id.box);
Button button = (Button) findViewById(R.id.button);
final DBPrefsInterface iface = new DBPrefsInterface(cbx);
button.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
iface.toggle();
}
});
}
private class DBPrefsInterface {
CheckBox cbx = null;
public DBPrefsInterface(CheckBox cbx) {
this.cbx = cbx;
}
public void toggle() {
cbx.setChecked(cbx.isChecked());
}
}