2017-01-30 4 views
5

activity_layout.xmlкнопка привязки OnClick не работает

<?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(), метод не вызывается, отметим, отображается в выводе или не выполняется никаких действий. Но работает традиционным способом с onClickListener

ответ

14

Я думаю, что в вашей декларации активности есть ошибка. Во всяком случае, вы все еще не устанавливать свой обратный вызов, как таковой:

binding.setCallback(this);

или

binding.setCallback(actionCallback);

+0

Android-студия ищет привязки типов. Ошибка, которую вы описали, не является допустимой. – Sergey

+0

@ Серджи, если бы вы обратили немного внимание, которое вы видели, я редактировал вопрос, потому что его код выглядел не так, это ошибка, которую я имел в виду. Не так, как вы думали, это было – Chisko

+0

@Chisko Это работает сейчас, спасибо большое. установка 'binding.setCallBack (actionCallback);' resolved it –