【问题标题】:Recyclerview OnItem Click Listener is not workingRecyclerview On Item Click Listener 不工作
【发布时间】:2016-08-08 05:27:06
【问题描述】:

您好,我正在使用 recyclerview,其中 onitem 点击侦听器不起作用,我也使用接口实现。 我的编码 在片段中:

public void setList() {

    int total = 0;
    for (CartRes item : cartBasket) {
    }

    final LinearLayoutManager layoutManager = new GridLayoutManager(context,2);
    layoutManager.setOrientation(LinearLayoutManager.VERTICAL);
    recyclerView.setLayoutManager(layoutManager);
    adapter = new NewAdapter(context, cartBasket, mListener, MYFRAGMENT, MyJavaClass.this);

    recyclerView.setAdapter(adapter);
    adapter.notifyDataSetChanged();
}

public interface CartListInterface {
    // TODO: Update argument type and name
    void onListFragmentInteraction(CartRes item);


}
@Override
public void onStop() {
    super.onStop();
    CommonUtil.dbUtil.close();
}

@Override
public void onStart() {
    super.onStart();
    CommonUtil.dbUtil.open();
}

@Override
public void onAttach(Context context) {
    super.onAttach(context);
    if (context instanceof CartListInterface) {
        mListener = (CartListInterface) context;
    } else {
        throw new RuntimeException(context.toString()
                + " must implement OnAccListFragInteractionListener");
    }


}

@Override
public void onDetach() {
    super.onDetach();
    mListener = null;
}

和我的适配器:

    public NewAdapter(Context context, List<CartRes> cartBasket, MyJavaClass.CartListInterface mListener, String myfragment, MyJavaClass Cartfragment) {
    cartRes = cartBasket;
    MYFRAGMENT = myfragment;
    this.mListener = mListener;
    this.con = context;
    this.fragment = Cartfragment;
}


@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
    View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.chicken_list, parent, false);
    CommonUtil.dbUtil = new DbUtil(con);
    CommonUtil.dbUtil.open();
    CommonUtil.dbHelper = new DbHelper(con);
    return new ViewHolder(view);
}

@Override
public void onBindViewHolder(final ViewHolder holder, final int position) {

    /*
    * Get the values from CartRes Class
    *
    * */
    if (null != mListener) {

        mListener.onListFragmentInteraction(holder.cartRess);
    } else{
        Log.e("edgarrr","No Listner");
    }

    holder.cartRess = cartRes.get(position);


    holder.prName.setText(cartRes.get(position).proname);

   holder.prName.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
  mListener.onListFragmentInteraction(holder.cartRess);
   }

* */
public class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {

    public TextView prName, prate,prid,weight,itemid;
    public CardView cardlist_item;
    LinearLayout linearBG;
    ImageView bgImage,imgCart,offer;
    Spinner spinner1;
    CartRes cartRess;


    public ViewHolder(View itemView) {
        super(itemView);

        itemView.setClickable(true);
        itemView.setOnClickListener(this);
        cardlist_item = (CardView) itemView.findViewById(R.id.cardlist_item1);

        prName = (TextView) itemView.findViewById(R.id.ShpName);
        prate = (TextView) itemView.findViewById(R.id.rate);




        linearBG = (LinearLayout) itemView.findViewById(R.id.linearBG);
        bgImage = (ImageView) itemView.findViewById(R.id.imageView);





    }


    @Override
    public void onClick(View view) {
        mListener.onListFragmentInteraction(cartRess);

    }
}

谁能帮我完成这个,我不知道我在哪里做错了。请指出我的错误,我尝试在这里搜索实现多种方式,onitem点击监听器想要在适配器的bindholder中实现

【问题讨论】:

  • 代码看起来不错,能把触发监听器的代码贴出来吗?

标签: onitemclicklistener android-recyclerview


【解决方案1】:

将 onClickListener 更改为此并重试:

@Override
public void onBindViewHolder(final ViewHolder holder, final int position) {

    holder.cartRess = cartRes.get(position);
    holder.prName.setText(cartRes.get(position).proname);

}


public class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {

    public TextView prName, prate,prid,weight,itemid;
    public CardView cardlist_item;
    LinearLayout linearBG;
    ImageView bgImage,imgCart,offer;
    Spinner spinner1;
    CartRes cartRess;

    public ViewHolder(View itemView) {
        super(itemView);
        itemView.setClickable(true);
        itemView.setOnClickListener(this);
        cardlist_item = (CardView)    
        itemView.findViewById(R.id.cardlist_item1);
        prName = (TextView) itemView.findViewById(R.id.ShpName);
        prate = (TextView) itemView.findViewById(R.id.rate);
        linearBG = (LinearLayout) itemView.findViewById(R.id.linearBG);
        bgImage = (ImageView) itemView.findViewById(R.id.imageView);
    }

       @Override
       public void onClick(View view) {
            int selectedPosition = getAdapterPosition();
            if( selectedPosition != RecyclerView.NO_POSITION )      
            {
              CartRes item = cartBasket.get(selectedPostion);
              mListener.onListFragmentInteraction(item);
            }
       }
}

【讨论】:

  • 永远不要使用那样的位置。始终使用 vh.getAdapterPosition。
  • 谢谢.. 将更新代码,请检查并让我知道它是否正确? @yigit
  • 注释掉 itemView.setOnClickListener(this);在你的 viewHolder 类中
  • 它是否给出任何错误?调试代码并检查监听器是否被触发。
猜你喜欢
  • 2018-04-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-08-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多