要解决Android RecyclerView的内容点击监听器不正常工作的问题,可以尝试以下方法:
public class MyAdapter extends RecyclerView.Adapter {
private List mData;
private OnItemClickListener mListener;
public interface OnItemClickListener {
void onItemClick(int position);
}
public MyAdapter(List data, OnItemClickListener listener) {
mData = data;
mListener = listener;
}
@NonNull
@Override
public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_layout, parent, false);
return new ViewHolder(view);
}
@Override
public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
holder.button.setText(mData.get(position));
}
@Override
public int getItemCount() {
return mData.size();
}
public class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {
Button button;
public ViewHolder(@NonNull View itemView) {
super(itemView);
button = itemView.findViewById(R.id.button);
button.setOnClickListener(this);
}
@Override
public void onClick(View v) {
if (mListener != null) {
mListener.onItemClick(getAdapterPosition());
}
}
}
}
public class MyActivity extends AppCompatActivity {
private RecyclerView mRecyclerView;
private List mData;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mRecyclerView = findViewById(R.id.recycler_view);
mData = new ArrayList<>();
// 添加数据
MyAdapter mAdapter = new MyAdapter(mData, new MyAdapter.OnItemClickListener() {
@Override
public void onItemClick(int position) {
// 处理点击事件
}
});
mRecyclerView.setLayoutManager(new LinearLayoutManager(this));
mRecyclerView.setAdapter(mAdapter);
}
}
通过以上方法,可以确保RecyclerView的内容点击监听器正常工作。当点击项布局中的可点击元素时,会触发对应的点击事件。