Recycler View项目onClick无法正常工作。(工作异常)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Recycler View项目onClick无法正常工作。(工作异常)相关的知识,希望对你有一定的参考价值。

我已经看到了所有相关链接,但还没有找到任何解决方案。我现在要解释这个问题。我有recyclerview(网格布局),我像往常一样设置了一个Click监听器。但是这个行为异常。经过这么多次点击不同的项目。 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())+" 

");
        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".

它会很好。希望它可以帮助某人。谢谢你们回答。

另一答案

我遇到了同样的问题,发生的事情是在我的情况下发生了很多ui事件,这些ui事件是一个不必要的网络呼叫成功的连续发生,并且此呼叫的onSuccess正在更新列表所以我想不能点击任何东西既不是列表中的按钮也不是整个列表项(我知道原因可能是别的但是这可能是原因)解决方案:删除了UI mutator(不必要的网络调用)并且它工作正常。

以上是关于Recycler View项目onClick无法正常工作。(工作异常)的主要内容,如果未能解决你的问题,请参考以下文章

如何突出显示 Recycler View 的选定项目?

Dpad 导航无法在 Appbarlayout 下方的 recyclerview 的电视上工作(recycler view 无法通过 dpad 获得焦点)

为啥 onBindViewHolder 索引在 Recycler View 中没有增加?

Recycler View 中的约束设置动画未正确设置动画

Annotations Recycler View ItemClick

Recycler View Android中的Firestore数据[重复]