0

您好我正在使用recyclerview其中onitem单击侦听器不工作我也使用接口实现。 我的编码 在片段: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

+0

的代码似乎罚款,你能发布监听器被触发的代码? –

回答

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); 
      } 
     } 
} 
+0

千万不要使用那样的位置。始终使用vh.getAdapterPosition。 – yigit

+0

谢谢..会更新代码,请检查并让我知道它的权利? @yigit –

+0

它不起作用 –