tutorial studio example español ejemplo databinding data java android xml data-binding

java - studio - data binding español



La vinculación de datos de Android transfiere argumentos al método onClick (2)

@yigit es correcto, quiero agregar un poco más de información.

De la documentación de DataBinding de Android , puedes ver un ejemplo.

Usted tiene una clase de presentador o controlador como a continuación

public class Presenter { public void onSaveClick(View view, Task task){} }

Ahora tome la variable de tipo Presenter en su diseño. y haga clic en hacer clic como a continuación.

<?xml version="1.0" encoding="utf-8"?> <layout xmlns:android="http://schemas.android.com/apk/res/android"> <data> <variable name="task" type="com.android.example.Task" /> <variable name="presenter" type="com.android.example.Presenter" /> </data> <LinearLayout ...> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:onClick="@{(view) -> presenter.onSaveClick(view, task)}" /> </LinearLayout> </layout>

Puede agregar más argumentos en esto.

¿Es posible pasar argumentos personalizados al método onClick usando la Biblioteca de enlace de datos? Tengo mi archivo xml de diseño donde necesito usar onClickListener:

<?xml version="1.0" encoding="utf-8"?> <layout ...> <data> <variable name="viewModel" type="com.productivity.tiktak.ui.tracker.viewModel.CategoryViewModel"/> <variable name="callback" type="com.productivity.tiktak.ui.tracker.TrackerAdapter"/> </data> <android.support.v7.widget.CardView android:onClick="@{callback.onCategoryClick(viewModel)}" ... android:layout_width="match_parent" android:layout_height="wrap_content"> <!-- ... Some stuff --> </android.support.v7.widget.CardView> </layout>

y yo tengo mi código de controlador de clic aquí:

public void onCategoryClick(View view, CategoryViewModel categoryViewModel) { //handler code... }

¿Es posible pasar mi objeto CategoryViewModel desde xml a click handler?


Puedes usar expresiones lambda.

android:onClick="@{() -> callback.onCategoryClick(viewModel)}"

Si necesita la vista, puede pasar eso también con:

android:onClick="@{(v) -> callback.onCategoryClick(v, viewModel)}"