在CheckBox文本上设置onClickListener

时间:2013-10-14 19:49:48

标签: android checkbox onclicklistener

我在xml文件中创建了一个checkBox。我试图在checkBox的文本上设置onClickListener但是我找不到真正的解决方案。换句话说,我希望能够单击复选框(使复选框可选)以及单击文本以使用协议期限打开新活动。谢谢。

main.xml中

 <CheckBox
    android:id="@+id/checkBox1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="I agree to the Terms of Agreement."
    android:textColor="#CC000000"
    android:checked="true"/>

这是我尝试的以下代码,但它只会导致它崩溃。

CheckBox checkBox1 = (CheckBox) findViewById(R.id.checkBox1);
Button termsOfAgreement = (Button) checkBox2.getText();

 ....

termsOfAgreement.setOnClickListener(new OnClickListener(){

        @Override
        public void onClick(View v) {
             //Launch activity
        }           
    });

5 个答案:

答案 0 :(得分:4)

getText()不是一个按钮,它是一个字符串,因此您无法将其强制转换为按钮。

最好不要为复选框设置文本,只需使用常规文本视图旁边的复选框并在文本上放置一个监听器。

然后,您必须在单击文本时管理复选框。所以你将有2个点击监听器,一个用于复选框,一个用于textview

答案 1 :(得分:3)

看上去之前的答案都没有真正给出你想要的东西,你可能只需将CheckBox和TextView包装在一个更大的视图组中(如LinearLayout)。

你在xml中的实现看起来如下:

<LinearLayout
    android:id="@+id/check_box_and_text"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:clickable="true"
    android:orientation="horizontal">

    <CheckBox
        android:id="@+id/checkBox"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_margin="5dp"
        android:textColor="#CC000000"
        android:checked="true"/>

    <TextView
        android:id="@+id/termsOfAgreement"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="I agree to the Terms of Agreement."
        android:textColor="#CC000000"
        android:textSize="16sp"/>

</LinearLayout>

有了这个,您现在可以将OnClickListener设置为 LinearLayout ,而不是为CheckBox和TextView设置一个。请注意,我在LinearLayout下将clickable设置为true。这是一个需要注意的重要事项,因为默认情况下,LinearLayout上的clickable为false。

您的java代码中的实现如下:

LinearLayout myCheckbox = (LinearLayout)findViewById(R.id.check_box_and_text);
myCheckbox.setOnClickListener(yourListener);

作为一个快速的最后注释,如果您发现CheckBox和TextView的对齐方式不稳定,请查看使用xml属性layout_gravity和gravity来获得它们的方式。

希望这有帮助!祝你好运

答案 2 :(得分:1)

可能有点作弊但是如何将textview(带有文本)放在复选框旁边(没有文本),这样你就可以使用textview的ontouch / onclick事件来设置复选框并打开活动,按下复选框只会选中/取消选中它。

答案 3 :(得分:1)

Result with TextView beside the CheckBox

似乎没有真正的解决方案。唯一的可能是将它放在checkBox旁边。这样做的目的是避免textView和checkBox之间的任何错位对齐,但这是提供的最佳解决方案。这是代码。

    <CheckBox
    android:id="@+id/checkBox"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_below="@+id/checkBox"
    android:layout_margin="5dp"
    android:textColor="#CC000000"
    android:checked="true"/>

    <TextView
     android:id="@+id/termsOfAgreement"
     android:layout_width="wrap_content"
     android:layout_height="wrap_content"
     android:text="I agree to the Terms of Agreement."
     android:textColor="#CC000000"
     android:layout_toRightOf="@id/checkBox"
     android:layout_alignTop="@id/checkBox"
     android:textSize="16sp"/>

然后在java代码中为TextView设置一个onClickListener,为CheckBox本身设置一个单独的监听器。

答案 4 :(得分:0)

onclick不是正确的倾听者,它的:

onCheckedChanged

编辑: 并设置监听器:

setOnCheckedChangeListener