Я новичок в библиотеке DataBinding и использую ее в адаптере recyclerview. Я хочу открыть другое действие по щелчку представления и передать ему идентификатор.
Ниже мой xml
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<data>
<variable
name="trainingPlanResponse"
type="xyz.TrainingPlanResponse" />
<variable
name="presenter"
type="xyz.MyPlansAdapter"/>
</data>
<TextView
android:id="@+id/tvPlan"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:drawableLeft="@drawable/ic_launcher"
android:drawableRight="@drawable/arrow_right"
android:layout_margin="@dimen/dp15"
android:text="@{trainingPlanResponse.planName}"
android:onClick="@{presenter.onClick}"
android:drawablePadding="@dimen/dp5"
android:textSize="@dimen/sp18"
android:textColor="@color/black_variant5"
android:gravity="center_vertical"
/>
</layout>
Ниже приведен код адаптера -
class MyPlansAdapter(private val context: Context?, private val list:ArrayList<TrainingPlanResponse> ):RecyclerView.Adapter<MyPlansAdapter.ViewHolder>()
{
override fun onBindViewHolder(holder: ViewHolder?, position: Int) {
holder!!.binding!!.setVariable(BR.trainingPlanResponse,list.get(position));
holder!!.binding!!.setVariable(BR.presenter,this);
// holder!!.tvPlans.text=list.get(position).planName
}
override fun onCreateViewHolder(parent: ViewGroup?, viewType: Int): ViewHolder {
val itemView=LayoutInflater.from(context).inflate(R.layout.item_myplans,parent,false);
return ViewHolder(itemView);
}
override fun getItemCount(): Int {
return list.size
}
fun onClick()
{
val intent = Intent(context, PlanWeekActivity::class.java)
context!!.startActivity(intent)
}
inner class ViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView)
{
// val tvPlans: TextView
var binding: ViewDataBinding?
init {
binding = DataBindingUtil.bind(itemView);
}
}
}
Я попытался использовать onClick из xml и получить ошибку ниже -
[kapt] Произошло исключение: android.databinding.tool.util.LoggedErrorException: обнаружены ошибки привязки данных.**** / ошибка привязки данных **** msg: класс прослушивателя android.view.View.OnClickListener с методом onClick не соответствует сигнатуре файла метода Presenter.onClick: xyz / item_myplans.xml loc: 20: 23 - 20: 39 **** \ ошибка привязки данных ****
Также я не могу понять, как я передам planId?Моя модель -
class TrainingPlanResponse{
var planId:String?=null;
var planName:String?=null;
}