Android,XML格式的Checkbox监听器?

时间:2011-02-19 16:05:29

标签: android xml checkbox listener

有可能做这样的事情

XML:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
              android:orientation="vertical"
              android:layout_width="match_parent"
              android:layout_height="match_parent">
    <Button android:layout_width="match_parent"
              android:layout_height="wrap_content"
              android:id="@+id/addContactButton"
              android:text="@string/addContactButtonLabel"  
              android:onClick="launchContactAdder"/><!-- here --> 

</LinearLayout>

爪哇:

public void launchContactAdder(View v)
{
    Intent i = new Intent(this, ContactAdder.class);
    startActivity(i);
}

但有一个要求是,该方法必须是公开的,无效的,最重要的是将View作为参数。

现在我想用Checkbox按钮做同样的事情。 Checkbox有android:onclick属性,但是在Android教程(http://developer.android.com/resources/samples/ContactManager/index.html)中我可以看到这段代码

showInvisibleControl.setOnCheckedChangeListener(new OnCheckedChangeListener()
{
    public void onCheckedChanged(CompoundButton buttonView, boolean isChecked)
    {
        Log.d(TAG, "mShowInvisibleControl changed: " + isChecked);
        showInvisible = isChecked;
        populateContactList();
    }
});

因此有一个onCheckedChanged(CompoundButton buttonView,boolean isChecked)方法。有没有办法通过XML来做到这一点?没有android:onCheckedChange属性,只有android:onClick属性,但正如我上面写的那样,该属性的名称必须有相应的方法名称,它将View作为参数,但从上面的代码我明白我必须有一个方法CompoundButton和boolean arguments。

以“XML方式”以任何方式做到这一点?

4 个答案:

答案 0 :(得分:6)

官方文件:https://developer.android.com/guide/topics/ui/controls/checkbox.html

<CheckBox android:id="@+id/checkbox_meat"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="@string/meat"
    android:onClick="onCheckboxClicked"/>
<CheckBox android:id="@+id/checkbox_cheese"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="@string/cheese"
    android:onClick="onCheckboxClicked"/>

答案 1 :(得分:4)

我发现Spinner Widget中的onItemSelected事件存在类似的问题。显然,Android团队认为这足以让我们在onClick事件中使用XML:S。

答案 2 :(得分:3)

现在可以使用数据绑定库来完成此操作。 首先,您需要创建一个处理程序类(在此示例中,我将其称为MainActivityHandlers)。在此处理程序类中,使用相应的实现定义一个方法(例如,名称为method1) 然后在您的布局文件中,您只需要实现:

  ...
 <data>
    <variable
        name="handler"
        type="com.test.android.testapp.MainActivityHandlers" />
</data>
...
         <RadioGroup
        ...
        android:onCheckedChanged="@{handler.method1}"
        ...
        >

你很高兴。 更多信息:https://developer.android.com/topic/libraries/data-binding/index.html

答案 3 :(得分:0)

我相信使用lambda更方便:

create index idx_accardacnt on mytable( to_number(accardacnt) );

有关详细信息,请参阅this

另外,我发现使用双向绑定对复选框非常有用:

to_number(accardacnt)

请注意,{/ 1}}在之前被称为双向绑定设置值。