RecyclerView onClickListener [дубликат]
На этот вопрос уже есть ответ здесь:
- RecyclerView onClick 37 ответов
public class ProjectAdapter extends RecyclerView.Adapter<ProjectAdapter.ViewHolder> {
private List<Project> itemsData;
OnItemClickListener mItemClickListener;
public ProjectAdapter(List<Project> itemsData) {
this.itemsData = itemsData;
}
// Create new views (invoked by the layout manager)
@Override
public ViewHolder onCreateViewHolder(ViewGroup parent,
int viewType) {
// create a new views
View itemLayoutView = LayoutInflater.from(parent.getContext())
.inflate(R.layout.item_layout, parent, false);
// create ViewHolder
ViewHolder vh = new ViewHolder(itemLayoutView);
return vh;
}
// Replace the contents of a view (invoked by the layout manager)
@Override
public void onBindViewHolder(ViewHolder viewHolder, int position) {
viewHolder.txtViewId.setText(String.valueOf(itemsData.get(position).getId()));
viewHolder.txtViewName.setText(itemsData.get(position).getName());
}
// inner class to hold a reference to each item of RecyclerView
public class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener{
public TextView txtViewName, txtViewId;
public ViewHolder(View itemLayoutView) {
super(itemLayoutView);
txtViewName = (TextView) itemLayoutView.findViewById(R.id.item_name);
txtViewId = (TextView) itemLayoutView.findViewById(R.id.item_id);
}
@Override
public void onClick(View v) {
System.out.println("onClick");
TextView tv = (TextView) v.findViewById(R.id.item_name);
String id = tv.getText().toString();
mItemClickListener.onItemClick(v, getAdapterPosition(), id); //OnItemClickListener mItemClickListener;
}
}
public interface OnItemClickListener {
public void onItemClick(View view, int position, String id);
}
public void SetOnItemClickListener(final OnItemClickListener mItemClickListener) {
this.mItemClickListener = mItemClickListener;
}
// Return the size of your itemsData (invoked by the layout manager)
@Override
public int getItemCount() {
return itemsData.size();
}
}
Проектная активность.java
projectAdapter.SetOnItemClickListener(new ProjectAdapter.OnItemClickListener() {
@Override
public void onItemClick(View v, int position, String id) {
System.out.println("onItemClick" + id);
ActionActivity(id);
}
});
Список отображается, щелчок не работает, даже журнал на консоль. Кто-нибудь знает, что я делал не так? Я использую SDK v23 в качестве версии compile sdk. Моя минимальная версия SDK-v19.
4 ответа:
Добавьте щелчок после нахождения вида следующим образом:
public ViewHolder(View itemLayoutView) { super(itemLayoutView); txtViewName = (TextView) itemLayoutView.findViewById(R.id.item_name); txtViewId = (TextView) itemLayoutView.findViewById(R.id.item_id); // here itemLayoutView.setOnClickListener(this); }
Установить прослушиватель щелчка элемента в строку вида recycler:
public ViewHolder(View itemLayoutView) { super(itemLayoutView); itemLayoutView.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { TextView tv = (TextView) v.findViewById(R.id.item_name); String id = tv.getText().toString(); mItemClickListener.onItemClick(getLayoutPosition(), v, id); } }); txtViewName = (TextView) itemLayoutView.findViewById(R.id.item_name); txtViewId = (TextView) itemLayoutView.findViewById(R.id.item_id); }
Вы не устанавливали
ClickListener
наtextView
или что-нибудь еще. На чтоView
должен звонитьonClick
?
Шаг 1: Изменить Конструктор
public ProjectAdapter(List<Project> itemsData,OnItemClickListener itemClickListener) { this.itemsData = itemsData; onItemClickListener = itemClickListener; }
Шаг 2: дайте ссылку на интерфейс
public MyViewHolder(View itemView) { super(itemView); itemView.setOnClickListener(this); }
Шаг 3: Дайте слушателю переходник из действия или фрагмента
MyAdapter myAdapter = new MyAdapter (list, this);