android - Recycler View item onClick 不工作。(工作异常)
问题描述
我已经查看了所有相关链接,但还没有找到任何解决方案。我现在将解释这个问题。我有recyclerview(网格布局),我像往常一样设置了一个点击监听器。但是这个行为异常。在多次点击不同的项目之后。OnClick 随机运行一到两次。任何帮助将不胜感激。我将在此处发布我的适配器类代码。
public class CurrentLoadNumberListAdapter extends RecyclerView.Adapter<CurrentLoadNumberListAdapter.ListViewHolder> {
private Context context;
private List<CurrentLoadNumberDetail> currentLoadNumberDetailList;
private NIOClient nioClient;
private FragmentManager fragmentManager;
private FragmentActivity myContext;
private Activity activity;
private android.support.v4.app.Fragment fragment;
private SweetAlertDialog sweetAlertDialogProgressBar;
public static int clickedPosition;
public CurrentLoadNumberListAdapter(Context context, List<CurrentLoadNumberDetail> currentLoadNumberDetailList , Activity activity, NIOClient nioClient) {
this.context = context;
this.currentLoadNumberDetailList = currentLoadNumberDetailList;
this.activity = activity;
this.nioClient = nioClient;
}
@NonNull
@Override
public ListViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
LayoutInflater inflater = LayoutInflater.from(context);
View view = inflater.inflate(R.layout.company_current_load_number_listlayout,null);
//Specifying Activity for Fragment Transaction
activity = activity;
myContext = (FragmentActivity) activity;
//Iniallizing Fragment Manager
fragmentManager = myContext.getSupportFragmentManager();
//Making Sweet Alert progress Bar
sweetAlertDialogProgressBar = new SweetAlertDialog(context,SweetAlertDialog.PROGRESS_TYPE);
sweetAlertDialogProgressBar.getProgressHelper().setBarColor(Color.parseColor("#9ccc65"));
return new CurrentLoadNumberListAdapter.ListViewHolder(view);
}
@Override
public void onBindViewHolder(@NonNull final ListViewHolder holder, final int position) {
holder.loadNumber.setText(currentLoadNumberDetailList.get(position).getLoadNumber());
}
@Override
public int getItemCount() {
return currentLoadNumberDetailList.size();
}
class ListViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {
private Button loadNumber;
public ListViewHolder(View itemView){
super(itemView);
loadNumber = itemView.findViewById(R.id.current_load_number);
itemView.setOnClickListener(this);
}
@Override
public void onClick(View view) {
int ItemPosition = getLayoutPosition();
//nioClient.sendMsg(getMinLoad(currentLoadNumberDetailList.get(position).getIdDeviceLoadRecord())+" \r\n\r\n");
Toast.makeText(context,"On click " + ItemPosition ,Toast.LENGTH_SHORT).show();
}
}
public void updateData(){
currentLoadNumberDetailList.clear();
notifyDataSetChanged();
}
private String getMinLoad(String id){
Gson gson = new Gson();
GetMinLoadRequestModel minLoadRequestModel = new GetMinLoadRequestModel();
minLoadRequestModel.setIdDeviceLoadRecord(id);
minLoadRequestModel.setMessageType("get_min_load_info");
String json = gson.toJson(minLoadRequestModel,GetMinLoadRequestModel.class);
return json;
}
}
任何人都请看一看。谢谢你。
解决方案
所以我发现了问题。正如@Veselin Todorov 建议的那样。默认情况下,按钮是可点击的视图,因此它在到达我的 viewHolder 之前就消耗了 onClick。 解决方案 只需制作按钮xml属性
android:clickable="false".
它会正常工作。希望它可以帮助某人。谢谢你们的回答。
推荐阅读
- python - 如何在python中实现稀疏矩阵
- python - 如何使 python pyinstaller 可执行文件可共享
- python - Sphero - OverflowError:Python int 太大而无法转换为 C long
- java - 如何解决 Intellij Idea 的“无法启动 Scala 编译服务器”?
- node.js - 从迅雷客户端发送承载授权请求时,标题内容[“授权”]中的字符无效
- python - 将 Seaborn Plot 保存为 PDF 会移动颜色条框架
- ckeditor - CKEditor 4 自定义编辑器显示但无法正常工作
- flutter - 无法使用另一个小部件中存在的列表
- django - 输出中的 Django 新行
- amazon-s3 - 如何限制 Visual Studio AWS Explorer 中列出的 S3 存储桶