我在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
}
});
答案 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)
似乎没有真正的解决方案。唯一的可能是将它放在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