Может быть много способов, одним из них является то, что вы можете использовать Generics Java .
Установить щелчок в вашем onCreateViewHolder
, установить щелчок и передать элемент списка из строки, по которой щелкнулиили все, что вам нужно.Вы можете настроить метод onClickViews
, если вам нужно положение или любое другое поле.
@Override
public MyViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int position) {
..
itemView.setOnClickListener(v -> onClickViews(itemView, dataList.get(position)));
..
}
и
public abstract void onClickViews(View view, T object);
Используйте как
public class SampleAdapter extends BaseAdapters<Item> {
@Override
public int getRowLayout() {
return R.layout.row;
}
@Override
public void onClickViews(View view, Item object) {
// row clicked
}
}
Я отредактировал ваш класс aбит.
public abstract class BaseAdapters<T> extends RecyclerView.Adapter<BaseAdapters.MyViewHolder> {
protected List<T> dataList = new ArrayList<>();
public class MyViewHolder extends RecyclerView.ViewHolder {
MyViewHolder(View view) {
super(view);
declareViews(view, this);
}
}
@Override
public void onBindViewHolder(@NonNull MyViewHolder holder, int i) {
bindView(holder, i);
}
public void notifyList(List<T> filteredNames) {
dataList = filteredNames;
notifyDataSetChanged();
}
@Override
public int getItemCount() {
return dataList.size();
}
@NonNull
@Override
public MyViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int position) {
View itemView = LayoutInflater.from(parent.getContext()).inflate(getRowLayout(), parent, false);
itemView.setOnClickListener(v -> onClickViews(itemView, dataList.get(position)));
return new MyViewHolder(itemView);
}
public abstract @LayoutRes
int getRowLayout();
public abstract MyViewHolder bindView(MyViewHolder holder, int position);
public abstract void onClickViews(View view, T object);
public abstract void declareViews(View view, MyViewHolder holder);
}