2016-12-10 326 views
1

目前我正在學習Android數據綁定。我嘗試了一些lambda代碼,但它不起作用。Android數據綁定監聽器視圖

我想從我的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> 

的Java:

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; 
     } 
    } 

} 

MAIN:

public class MainActivity extends AppCompatActivity { 

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

} 
+0

它做一個varable像你'buttonAction' – pskink

+0

它不是它不工作 –

+0

什麼不起作用? – pskink

回答

0

您需要將ButtonAction類的實例傳遞給佈局文件。

它可以通過

 activityMainBinding.setButtonAction(new ButtonAction());