2016-12-10 117 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());