代码之家  ›  专栏  ›  技术社区  ›  Eugene

数据绑定按钮onclick不工作

  •  12
  • Eugene  · 技术社区  · 9 年前

    activity_layout.xml

    <?xml version="1.0" encoding="utf-8"?>
    <layout xmlns:android="http://schemas.android.com/apk/res/android">
    
        <data>
            <import type="android.view.View" />
    
            <variable
                name="callback"
                type="com.buscom.ActionCallBack" />
        </data>
    
        <LinearLayout xmlns:app="http://schemas.android.com/apk/res-auto"
            android:id="@+id/ll_oml"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:background="@color/grey_50"
            android:orientation="vertical">
    
            <android.support.design.widget.CoordinatorLayout
                android:layout_width="match_parent"
                android:layout_height="match_parent">
                <Button
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:onClick="@{(v) -> callback.onClick(v)}"
                    android:text="Menu" />
            </android.support.design.widget.CoordinatorLayout>
        </LinearLayout>
    </layout>
    

    ActionCallBack.java

    这是我在MainActivity中实现的接口

    public interface ActionCallback { 
        void onClick(View view);
    }
    

    MainActivity.java

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        binding = DataBindingUtil.setContentView(this, R.layout.activity_main);
        actionCallBack = new ActionCallBack() {
    
            @Override
            public void onClick(View view) {
                System.out.println("Call onclick method *****");
            }
        }
    }
    

    当我单击按钮时,不会调用onClick()方法,输出中会显示noting或不执行任何操作。但它与onClickListener的工作方式相同

    2 回复  |  直到 9 年前
        1
  •  30
  •   Chisko    9 年前

    我认为您的活动声明中有一个错误。无论如何,您仍然没有设置回调,因此:

    binding.setCallback(this);

    或

    binding.setCallback(actionCallback);

        2
  •  2
  •   Tomerikoo Glorified    5 年前

    我用这个解决了这个问题:

    binding.setHandlers(this);
    

    我在一个碎片里工作。