setOnClickListeners用于动态创建的复选框

时间:2011-02-24 13:45:41

标签: android dynamic checkbox

我在尝试在应用程序中创建Checkboxes Dynamic时遇到问题。设计工作正常,我可以创建尽可能多的复选框。复选框与TextView一起放入TableRow,以便文本位于复选框的左侧。但我的问题是,在我的活动中,我可以获得复选框的“状态”,无论是否已选中。 我使用inflater来创建我的Checkboxes。复选框的xml:

<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的内容,然后检查所需复选框的状态。

2 个答案:

答案 0 :(得分:4)

请改用setOnCheckedChangeListener。它将触发onCheckedChanged(CompoundButton buttonView, boolean isChecked)方法,您现在可以在其中显示isChecked变量的复选框状态。

答案 1 :(得分:1)

您可以使用一个全局整数数组,该数组将包含与表中的行一样多的元素。如果选中复选框,则将元素的值设置为1,未选中则设置为0。通过查找哪个元素具有1,您可以检查哪个复选框。希望这对你有用。