【发布时间】:2018-06-26 13:30:50
【问题描述】:
我想在RecyclerView 上设置一个OnClickListener,不在它的项目上 以便在用户点击RecyclerView 时触发点击事件(即使它是空的或满载物品)。
- 我正在使用 MVVM
- 我试过
mRecyclerView.setClickable(true),不行
我想要什么
mRecyclerView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// do something
}
});
我的适配器类
public class TaskItemAdapter extends RecyclerView.Adapter<TaskItemAdapter.BaseItemAdapterViewHolder> {
private static final String TAG = TaskItemAdapter.class.getSimpleName();
private List<Task> mTaskList;
private View.OnLongClickListener mOnLongClickListener;
public TaskItemAdapter(List<Task> taskList, View.OnLongClickListener longClickListener) {
mTaskList = taskList;
mOnLongClickListener = longClickListener;
}
@NonNull
@Override
public BaseItemAdapterViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
if (parent instanceof RecyclerView) {
int layoutId = R.layout.item_list_main;
View view = LayoutInflater.from(parent.getContext()).inflate(layoutId, parent, false);
view.setFocusable(true);
return new BaseItemAdapterViewHolder(view);
} else {
throw new RuntimeException(TAG + "Not bound to recyclerView");
}
}
@Override
public void onBindViewHolder(@NonNull BaseItemAdapterViewHolder holder, int position) {
Task task = mTaskList.get(position);
holder.mItemTextView.setText("- " + task.getName());
holder.itemView.setTag(task);
holder.itemView.setOnLongClickListener(mOnLongClickListener);
}
@Override
public int getItemCount() {
return mTaskList.size();
}
public void loadItems(List<Task> taskList) {
mTaskList = taskList;
notifyDataSetChanged();
}
public class BaseItemAdapterViewHolder extends RecyclerView.ViewHolder {
@BindView(R.id.item_textView)
TextView mItemTextView;
public BaseItemAdapterViewHolder(View view) {
super(view);
ButterKnife.bind(this, view);
}
}
}
【问题讨论】:
-
RecyclerView我认为不要对点击事件进行操作。您可以通过将onClickListener添加到为空的背景视图(在回收器视图下)来解决您的问题,或者在它不为空时收听onItemClick。 -
当您点击
RecyclerView的项目时,您希望在 RecyclerView 和 RecyclerView 项目或仅 RecyclerView 上接收点击监听? -
你在解决什么问题?
-
你想达到什么目的?因为如果你为recyclerview设置了一个clicklistener,无论它是满的还是空的,那么你将无法正确地为每个项目设置一个clicklistener。
标签: android android-recyclerview onclicklistener