如何通过数据绑定附加自定义事件?

时间:2019-02-08 10:36:03

标签: java android-studio android-spinner android-databinding

注意: 还将在底部查看已编辑的代码以进行进一步的开发。

我们如何使用数据绑定(特别是通过侦听器绑定)将事件附加/分配给微调器。 这是关于数据绑定用法的article。因此,我正在尝试代码,但未能分配事件。

Android Studio 3.2.1

activity_parents_reg.xml


    <data>
        <import type="java.util.ArrayList" />
        <variable name="handlers"
            type="com.example.myUser.myapplication.custom.MyHandlers"
        />
        <variable
            name="cities"
            type="ArrayList&lt;String>"
        />
    <data>

    <Spinner
        android:id="@+id/dd_city"
        android:entries="@{cities}"
        android:onClick="@{() -> handlers.onClickFriend()}"
        style="@style/dropdown"
    />

MyHandlers.java


   public class MyHandlers {
        public void onClickFriend(View view) {}
   }

ParentsReg.java


    //  Data binding
        ActivityParentsRegBinding binding = DataBindingUtil.setContentView(this, R.layout.activity_parents_reg);
        binding.setCities(ConstData.getCitiesList());
        binding.setHandlers(new MyHandlers());

这是编译时收到的错误:

    Found data binding errors.

    ****/ data binding error ****msg:cannot find method onClickFriend() in class 
    com.example.myUser.myapplication.custom.MyHandlers 
    file:/home/myUser/AndroidStudioProjects/MyApplication/app/src/main/
    res/layout/activity_parents_reg.xml loc:103:37 - 103:60 
    ****\ data binding error ****




已编辑:

现在,经过观察和试验。我从代码的另一个角度来确保语法正确。

实际上,微调器出现了问题。也许它需要一个适配器来设置事件。

在这里,解决Button的代码也几乎没有变化:

    // Activity layout changes.
    <Button
        android:id="@+id/btn_reg_submit"
        android:text="Submit"
        android:onClick="@{(view) -> handlers.onClickFriend(view)}"
        style="@style/btn_secondary"
    />

    // MyHandlers class changes.
    public class MyHandlers {

        private Context _context;

        public MyHandlers(Context context) {
            _context = context;
        }

        public void onClickFriend(View view) {
            Toast.makeText(_context, "Button Clicked", Toast.LENGTH_SHORT).show();
        }
    }

    // Activity class changes.
    binding.setHandlers(new MyHandlers(context));



仍然停留在微调器上。

希望我能得到答案。

0 个答案:

没有答案