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

它不起作用 –