2011-02-24 106 views
3

我在嘗試在我的應用程序中創建複選框動態時遇到問題。設計工作正常,我能夠創建儘可能多的複選框,我想要的。複選框與TextView一起放入TableRow中,以便文本位於複選框的左側。但我的問題是,在我的活動中,我可以獲得複選框的「狀態」,無論是否選中。 我使用充氣器來創建我的複選框。對於複選框的XML:setOnClickListeners動態創建的複選框

<TableRow xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/TableRow" android:layout_width="wrap_content" android:layout_height="wrap_content"> 
<TextView android:paddingLeft="20dip" android:id="@+id/tv_effect" android:gravity="left" android:layout_height="wrap_content" android:layout_gravity="center_vertical" android:textColor="#000" android:textSize="18dip" android:layout_width="wrap_content"></TextView> 
<CheckBox android:id="@+id/cb_effect" android:layout_height="wrap_content" android:text="" android:layout_gravity="right" android:layout_width="wrap_content"></CheckBox> 

功能我調用創建一個包含一個TextView和一個複選框一個新的TableRow:

public void layoutMakeSpeakerEffect(String effectName,int effectNumber) 
{ 
    LayoutInflater linflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
    View myViewSp = linflater.inflate(R.layout.speaker_settings, null); 

    final TextView tv_effect = (TextView) myViewSp.findViewById(R.id.tv_effect); 
    tv_effect.setId(effectNumber); 
    tv_effect.setText(effectName); 

    final CheckBox cb_effect = (CheckBox) myViewSp.findViewById(R.id.cb_effect); 
    cb_effect.setId(effectNumber); 
    cb_effect.setText(""); 

    cb_effect.setOnClickListener(new OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       if(cb_effect.isChecked()) 
       { 
        Toast toast = Toast.makeText(getApplicationContext(), ""+tv_effect.getText()+": ON", Toast.LENGTH_SHORT); 
        toast.show(); 
       } 
       else 
       { 
        Toast toast = Toast.makeText(getApplicationContext(), ""+tv_effect.getText()+": OFF", Toast.LENGTH_SHORT); 
        toast.show(); 
       } 
      } 
    }); 

    tl_speakerSettings.addView(myViewSp); 
} 

而且如前所述,設計工作正常。 但是我怎麼能夠在這個功能之外從複選框中取消「狀態」呢? 而且我還需要一個可以清除複選框狀態的功能,以及另一個可以啓用和禁用複選框的功能?

我似乎無法自己解決這個問題。

我唯一的想法是做一些檢查「cb_effects」ID並隨後檢查所需複選框的狀態。

回答

4

改爲使用setOnCheckedChangeListener。它會觸發onCheckedChanged(CompoundButton buttonView, boolean isChecked)方法,您現在可以在該方框中讀取isChecked變量的複選框狀態。

+0

謝謝你的回答@Cristian。但我仍然有點困惑。這怎麼能幫助我解決問題?我需要的是一種方法來保存我創建的複選框的狀態,當我單擊一個切換按鈕時,我需要清除複選框的狀態,並在再次按下切換按鈕時將「舊」狀態重新打開。通過實現setOnCheckedChangeListener而不是實際上我怎麼看到按下了什麼複選框? – CoOkie

+0

因爲它也給你一個複選框的引用:'buttonView'。這是一個對象,你可以用它來做任何你想要的複選框:'Checkbox bla =(Checkbox)buttonView;'。 – Cristian

+0

好的謝謝,我會嘗試這種方法,然後..:D – CoOkie

1

您可以使用全局整數數組,該數組將包含與表中的行數一樣多的元素。如果選中複選框,則將元素的值設置爲1,將未選中的元素的值設置爲0。通過查找哪個元素具有1,您可以確定選中哪個複選框。希望這對你有用。