2011-10-24 22 views
0

嗨,大家好,我不明白爲什麼我不能得到它的工作,檢查從另一個類內的活動複選框。通過一個活動的參考

在我傳遞自身的引用到其他類別的活動

public MainActivity() 
... 
dbi = new DBPrefsInterface(this); 
... 
} 

public DBPrefsInterface(Context ctx) 
{ 
    MainActivity pma = (MainActivity)ctx; 
    this.ma = pma; 
} 

現在我試圖檢查其放置在活動複選框的onCreate方法

this.ma.cbx.setChecked(true); 

但它不工作。

看來我沒有通過一個引用,只有一個MainActivity的副本。

感謝adcance

+0

它變得更加詭異\t \t this.ma.cbx.setClickable(真);不工作,this.ma.cbx.setChecked(false);沒有工作\t \t this.ma.cbx.setChecked(true);帶給我一個空指針異常 – Simbi

回答

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()); 
    } 
} 
+0

導致同樣的問題:(由於某種原因它不起作用 – Simbi

+0

我用一個例子編輯了我的答案,如果它仍然不起作用,請讓我知道這是不是工作。 – Craigy

0

我不明白你爲什麼會想這樣做,但我想用下面的構造會做的工作:

private MainActivity ma; 
public DBPrefsInterface(MainActivity a){ 
    ma = a; 
} 

然後設置複選框(但複選框需要公開才能工作):

ma.cbx.setChecked(true); 
+0

我正是這樣做的, – Simbi

+0

它應該工作,你通過活動的參考。然後你必須在你的活動中公開這個複選框才能以這種方式訪問​​它 – Carnal

1

嘗試傳遞一個處理程序,並在其它類

的構造的複選框的參考,使處理程序發送消息該複選框的原始上下文

hanlder.post(new Runnable() { 

@override 
void run { 
checkbox.setChecked(true); 
} 

});