Android数据绑定侦听器视图

时间:2016-12-10 16:57:15

标签: java android xml listener

目前我正在学习Android数据绑定。我尝试了一些lambda代码,但它不起作用。

我试图从我的XML代码中调用onClick方法。我的错误在哪里?缺少什么?

我查看了Android文档但他们的代码中有第二个参数,如:

android:onClick="@{(v) -> fabBehavior.onFabClick(v, task)}"

我不知道task是什么。

XML:          

    <data>

        <variable
            name="buttonAction"
            type="com.sarahp.buttonaction.ButtonAction"/>
    </data>

    <LinearLayout
        android:id="@+id/activity_main"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical"
        android:paddingBottom="@dimen/activity_vertical_margin"
        android:paddingLeft="@dimen/activity_horizontal_margin"
        android:paddingRight="@dimen/activity_horizontal_margin"
        android:paddingTop="@dimen/activity_vertical_margin"
        tools:context="com.sarahp.buttonaction.MainActivity">

        <android.support.design.widget.FloatingActionButton
            android:id="@+id/fab_a"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:onClick="@{(v) -> buttonAction.onFabClick(v)}"
            android:src="@android:drawable/ic_input_add"/>

        <android.support.design.widget.FloatingActionButton
            android:id="@+id/fab_b"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginTop="48dp"
            android:onClick="@{(v) -> buttonAction.onFabClick(v)}"
            android:src="@android:drawable/ic_input_add"/>

    </LinearLayout>
</layout>

爪哇:

public class ButtonAction{

    public void onFabClick(View view) {
        switch (view.getId()) {
            case R.id.fab_a:
                Toast.makeText(context, "A Clicked", Toast.LENGTH_SHORT).show();
                break;
            case R.id.fab_b:
                Toast.makeText(context, "B Clicked", Toast.LENGTH_SHORT).show();
                break;
            default:
                break;
        }
    }

}

主要

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        ActivityMainBinding activityMainBinding = DataBindingUtil.setContentView(this, R.layout.activity_main);
    }

}

2 个答案:

答案 0 :(得分:1)

您需要将ButtonAction类的实例传递给布局文件。

可以通过

完成
      activityMainBinding.setButtonAction(new ButtonAction());

答案 1 :(得分:0)

将类绑定到xml布局 关注Bhupendra Joshi&#39;