Moh*_*adL 7 android onclicklistener android-recyclerview
我想OnClickListener在 a上设置一个RecyclerView,而不是在它的项目上设置,以便在用户点击时触发点击事件RecyclerView(即使它是空的或充满项目)。
mRecyclerView.setClickable(true),不行我想要的是
mRecyclerView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// do something
}
});
Run Code Online (Sandbox Code Playgroud)
我的适配器类
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);
}
}
}
Run Code Online (Sandbox Code Playgroud)
我设法做到这一点:
我将两个侦听器传递给适配器:
View.OnClickListener;
View.OnTouchListener;
Run Code Online (Sandbox Code Playgroud)
在方法中onCreateViewHolder,我设置了两个侦听器并将 recyclerViewID 传递到标记中。
int layoutId = R.layout.item_list_main;
View view = LayoutInflater.from(parent.getContext()).inflate(layoutId, parent, false);
view.setFocusable(true);
parent.setOnTouchListener(mOnTouchListener);
view.setTag(R.id.PARENT_VIEW_ID, parent.getId());
view.setOnClickListener(mOnClickListener);
return new BaseItemAdapterViewHolder(view);
Run Code Online (Sandbox Code Playgroud)
在主要活动中:
View.OnTouchListener在recyclerView本身的空白空间中操作。View.OnClickListener在recyclerView的items中进行操作。因此,现在无论用户点击 recyclerView 或其项目,或其空状态,它都会触发整个点击。
| 归档时间: |
|
| 查看次数: |
1740 次 |
| 最近记录: |