Я использую mvvm и привязку данных в моем проекте. У меня есть представление переработчика и я делаю данные adaptor.my хорошо показанными в представлении переработчика. Теперь я хочу создать слушатель щелчка элемента.
Так что на В конце моего адаптера я создаю интерфейс, подобный этому:
interface MyClickListener {
void onItemClick(MyEntity myEntity);
}
, после этого я добавил этот слушатель в конструктор моего адаптера:
public class MyRecyclerAdapter extends ListAdapter<MyEntity, MyRecyclerAdapter.ViewHolder> {
public MyClickListener clickListener;
public MyRecyclerAdapter(MyClickListener clickListener) {
super(MyEntity.DIFF_CALLBACK);
this.clickListener = clickListener;
}
@Override
public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
MyEntity item = getItem(position);
holder.bind(item,clickListener);
}
, и я отправил свой обратный вызов в представление связывания xml:
private void bind(MyEntity item, MyClickListener clickListener) {
binding.setEntity(item);
binding.setClickListener(clickListener);
binding.executePendingBindings();
}
В 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="entity"
type="com.test.database.myEntity" />
<variable
name="clickListener"
type="com.test.home.MyClickListener" />
</data>
<androidx.cardview.widget.CardView
android:id="@+id/cardview_id"
android:layout_width="190dp"
android:layout_height="280dp"
android:layout_margin="5dp"
android:clickable="true"
android:foreground="?android:attr/selectableItemBackground"
app:cardBackgroundColor="@android:color/white"
app:cardCornerRadius="10dp"
app:cardElevation="5dp"
app:cardUseCompatPadding="true"
android:onClick="@{() -> clickListener.onItemClick(entity)}">
и я инициализирую этот обратный вызов в моем адаптере:
MyRecyclerAdapter adapter = new MyRecyclerAdapter(myEntity -> {
Toast.makeText(getContext(), myEntity.getID(), Toast.LENGTH_SHORT).show();
});
Но когда я запускаю приложение, я получил эту ошибку:
error: cannot find symbol class MyClickListener
В чем моя ошибка?
Мне нужно создать класс вместо интерфейса и создать новый объект? Нет способа использовать интерфейс?