如何以编程方式为多个复选框设置onClick

时间:2017-08-19 09:19:10

标签: android android-checkbox

没有任何额外的解释我只想以编程方式将我的Checkbox设置为相同的onClick,这是我的代码:

的xml:

<CheckBox
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:onClick="func"
    android:text="1"
    android:id="@+id/c1"/>
<CheckBox
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:text="2"
    android:onClick="func"
    android:id="@+id/c2"/>

<CheckBox
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:text="3"
    android:onClick="func"
    android:id="@+id/c3"/>

javaCode:

public void func(View view) {
    // Is the view now checked?


    CheckBox checkBox1 = (CheckBox)findViewById(R.id.c1);
    CheckBox checkBox2 = (CheckBox)findViewById(R.id.c2);
    CheckBox checkBox3 = (CheckBox)findViewById(R.id.c3);

    if(checkBox1.isChecked() && checkBox2.isChecked() && (!checkBox3.isChecked()))
    {
        Next = true;
    }
    else
    {
        Next = false;
    }
}

但是我想要一种程序化的方法。

我正在寻找类似的方式:

CheckBox checkBox1 = new CheckBox(context);
CheckBox checkBox2 = new CheckBox(context);
CheckBox checkBox3 = new CheckBox(context);

checkbox1.setOnclick(//TheFunction);
checkbox2.setOnClick(//TheFunction);
checkbox3.setOnClick(//TheFunction);

TheFunction与我之前代码中的func相同。

换句话说,我希望在点击任何复选框时调用一个独特的函数。

5 个答案:

答案 0 :(得分:1)

尝试使用此复选框

将相同的android:onClick="onCheckboxClicked"方法添加到所有复选框中,如下方复选框

<CheckBox
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:onClick="onCheckboxClicked"
    android:text="1"
    android:id="@+id/c1"/>
<CheckBox
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:text="2"
    android:onClick="onCheckboxClicked"
    android:id="@+id/c2"/>

<CheckBox
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:text="3"
    android:onClick="onCheckboxClicked"
    android:id="@+id/c3"/>

现在在您的活动文件中创建一个 onCheckboxClicked的方法,如下所示

public void onCheckboxClicked(View view) {

// now check that Is the view now checked?
boolean checked = ((CheckBox) view).isChecked();

// Check which checkbox was clicked
switch(view.getId()) {
    case c1:
        if (checked)
            //  c1 is cheked
        else
            // c1 is uncheked
        break;
    case c2:
        if (checked)
            // c2: is cheked
        else
            // c2: is ubcheked
        break;

 }
}

试试这个

chkbox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {

   @Override
   public void onCheckedChanged(CompoundButton buttonView,boolean isChecked) {
               if(isChecked){
                    fun();
                }

   }
}
);  

答案 1 :(得分:0)

您可以将 onClickListner 设置为复选框,就像这样

 checkBox1.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            CheckBox cb = (CheckBox) view;
            if(cb.isChecked()){

            }else{

            }
        }
    });

答案 2 :(得分:0)

您可以使用

checkBox.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

            }
        });
  

checkbox1.setOnClickListener(//函数);

     

checkbox2.setOnClickListener(//函数);

     

checkbox3.setOnClickListener(//函数);

答案 3 :(得分:0)

如果您不想一次又一次地重复相同的onClickListener代码,请创建此方法

private void setOnMyViewClick(View myView)
  {
    if(myView!= null)
    {
      myView.setOnClickListener(new View.OnClickListener()
      {
        @Override
        public void onClick(View v)
        {
          try
          {
            myViewClick(v, v.getResources().getResourceEntryName(v.getId()));
          }
          catch (Exception e)
          {

          }
        }
      });
    }
  }

创建一个处理点击的方法

private void myViewClick(View view, String viewName) throws Exception
{

}

并为任何复选框或任何其他视图注册onclick

setOnMyViewClick(checkbox1);

答案 4 :(得分:0)

在onCreate中

public void onCheckboxClicked(View view) {

        try {

            if ((view == c1) || (view == c2) || (view == c3)) {

                // You can perform a common action for all check box clicks here

            }
        } catch (Exception e) {
            e.printStackTrace();
            Log.e("onClick", e + "");
        }
    }
}

如果你想为每个复选框做不同的事件,你应该像Nilesh Rathod回答一样。