【问题标题】:setOnClickListeners for dynamic created CheckboxessetOnClickListeners 用于动态创建的复选框
【发布时间】:2015-12-30 16:35:05
【问题描述】:

尝试在我的应用程序中创建动态复选框时遇到问题。设计工作正常,我可以创建任意数量的复选框。 Checkboxes 与 TextView 一起放入 TableRow 中,以便文本位于复选框的左侧。但我的问题是,在我的活动中,无论是否选中,我都可以获得复选框的“状态”。 我使用充气机来创建我的复选框。复选框的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>

我调用该函数来创建一个包含文本视图和复选框的新表格行:

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

【问题讨论】:

    标签: android dynamic checkbox


    【解决方案1】:

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

    【讨论】:

    • 感谢@Cristian 的回答。但我还是有点困惑。这怎么能解决我的问题?我需要的是一种保存我创建的复选框状态的方法,当我单击切换按钮时,我需要清除复选框的状态,并在再次按下切换按钮时恢复“旧”状态。通过实现 setOnCheckedChangeListener 而不是我如何才能看到实际按下了哪个复选框?
    • 因为它还为您提供了对复选框的引用:buttonView。这是一个对象,您可以使用它对复选框执行任何操作:Checkbox bla = (Checkbox) buttonView;
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2013-01-25
      • 1970-01-01
      • 1970-01-01
      • 2016-06-16
      • 2011-04-06
      • 2010-10-26
      • 2019-05-19
      相关资源
      最近更新 更多