2016-12-10 6 views
1

Im Moment lerne ich Android Data Binding. Ich habe etwas Lambda-Code ausprobiert, aber es funktioniert nicht.Android Data Binding Listener Anzeigen

Ich versuche, die onClick Methode von meinem XML-Code aufzurufen. Wo ist mein Fehler? Fehlt etwas?

ich an der Android-Dokumentation gesucht, aber sie haben einen zweiten Parameter in ihrem Code wie:

android:onClick="@{(v) -> fabBehavior.onFabClick(v, task)}" 

Ich weiß nicht, was task ist.

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

seine eine varable erfolgen wie das Ihre 'buttonAction' – pskink

+0

es nicht –

+0

ist nicht funktioniert, was nicht funktioniert? – pskink

Antwort

0

Sie müssen eine Instanz der ButtonAction-Klasse an die Layoutdatei übergeben.

Es kann durch

 activityMainBinding.setButtonAction(new ButtonAction()); 
Verwandte Themen