0

//這是我的回收視圖代碼,錯誤是Android RecyclerView:java.lang.NullPointerException:CartRecyclerAdapter $ CustomViewHolder。 getAdapterPosition()」上一個空對象引用

public class CartRecyclerAdapter extends RecyclerView.Adapter<CartRecyclerAdapter.CustomViewHolder> { 
     //this is declaration declaration of variables 
     private List<Cart> feedItemList; 
       private Context mContext; 
       private List<Cart> mDataset; 
       List<Cart> list = Collections.emptyList(); 
       public CartRecyclerAdapter(Context context, List<Cart> feedItemList) { 
        this.feedItemList = feedItemList; 
        this.mContext = context; 
       } 

       @Override 
       public CustomViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) { 
        View view = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.cart_card, null); 

        CustomViewHolder viewHolder = new CustomViewHolder(view); 
        return viewHolder; 
       } 

       @Override 
       public void onBindViewHolder(final CustomViewHolder customViewHolder, int i) { 
        final Cart feedItem = feedItemList.get(i); 

        if (customViewHolder.mealTitle!= null) { 
         customViewHolder.mealTitle.setText(feedItem.getMeal_title()); 
        } 
        if (customViewHolder.mealPrice!= null) { 
         customViewHolder.mealPrice.setText(feedItem.getMeal_quanitity()); 
        } 
        if (customViewHolder.mealQuantity!= null) { 
         customViewHolder.mealQuantity.setText(feedItem.getMeal_price()); 
        } 

//錯誤就是從這裏

    View.OnClickListener clickListener = new View.OnClickListener() { 
         @Override 
         public void onClick(View view) { 
          CustomViewHolder holder = (CustomViewHolder) view.getTag(); 
          int position = holder.getAdapterPosition(); 
      //check here This is where the error os coming from 

          String numbers=feedItemList.get(position).toString(); 

          feedItemList.remove(numbers); 


         } 
        }; 

      customViewHolder.delete.setOnClickListener(clickListener); 



       customViewHolder.mealTitle.setTag(customViewHolder); 
      customViewHolder.mealPrice.setTag(customViewHolder); 
        customViewHolder.mealQuantity.setTag(customViewHolder); 
      setAnimation(customViewHolder, i); 


       } 
//Method to remove but I don't know how to initialize. 

       public void removeAt(int position) { 
        mDataset.remove(position); 
        notifyItemRemoved(position); 
        notifyItemRangeChanged(position,mDataset.size()); 
       } 
       @Override 
       public int getItemCount() { 
        return (null != feedItemList ? feedItemList.size() : 0); 
       } 

       public class CustomViewHolder extends RecyclerView.ViewHolder { 
        protected CardView t; 
        protected ImageView thumbnail; 
        protected TextView mealTitle; 
        protected ImageView delete; 
        protected TextView mealPrice; 
        protected TextView mealQuantity; 
        public CustomViewHolder(View v) { 
         super(v); 
        t = (CardView) v.findViewById(R.id.card_view); 
         thumbnail = (ImageView) v.findViewById(R.id.thumbnail); 
         mealTitle = (TextView)v.findViewById(R.id.meal_title); 
         delete = (ImageView)v.findViewById(R.id.delete); 
         mealPrice = (TextView)v.findViewById(R.id.meal_price); 
         mealQuantity = (TextView)v.findViewById(R.id.meal_quantity); 
      } 
       } 
      } 

回答

1

你得到空指針異常,因爲這條線CustomViewHolder holder = (CustomViewHolder) view.getTag();釋放出空來。因爲view.getTag()是空的。這可能是因爲在調用onClickListener之前,您尚未使用view.setTag()爲視圖設置標記。

0

我以爲你是裏面onBind

View.OnClickListener clickListener = new View.OnClickListener() { 
         @Override 
         public void onClick(View view) { 
          CustomViewHolder holder = (CustomViewHolder) view.getTag(); 
          int position = holder.getAdapterPosition(); 
      //check here This is where the error os coming from 

          String numbers=feedItemList.get(position).toString(); 

          feedItemList.remove(numbers); 


         } 
        }; 

所以這些代碼,我不知道的事情,所以找到你需要與CustomViewHolder

的創建對象

你可以直接使用位置給定位置在onBind()方法

相關問題