【问题标题】:Recycler View item onClick not working.(working abnormally)Recycler View item onClick 不工作。(工作异常)
【发布时间】:2018-09-13 08:01:43
【问题描述】:

我已查看所有相关链接,但尚未找到任何解决方案。我现在将解释这个问题。我有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;
}

}

请大家看看。谢谢你。

【问题讨论】:

  • 您是否尝试过在按钮外部粘贴以查看是否有效。该按钮是一个可点击的视图,并且可能会在事件到达您的视图持有者的 itemview 之前使用它们。
  • 我只是将xml属性的可点击属性设置为false。所以当我点击按钮时。在 onClick 中运行 toast 需要花费大量时间。
  • 通过点击按钮外部。它什么也没做,我什至做了一个新的干净的适配器。但没有任何变化。@VeselinTodorov

标签: android onclicklistener android-recyclerview


【解决方案1】:

所以我发现了问题。正如@Veselin Todorov 所建议的那样。默认情况下,按钮是可点击的视图,所以它在到达我的 viewHolder 之前就消耗了 onClick。 解决方案 只需制作按钮 xml 属性

android:clickable="false".

它会正常工作。 希望它可以帮助某人。 谢谢大家的回答。

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2018-07-19
      • 2017-09-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-11-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多