传递活动的参考

时间:2011-10-24 18:46:43

标签: android

大家好我无法弄明白为什么我无法让它工作,从另一个班级内检查一个活动的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

3 个答案:

答案 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());
    }
}