【问题标题】:Android RecyclerView:java.lang.NullPointerException: CartRecyclerAdapter$CustomViewHolder.getAdapterPosition()' on a null object referenceAndroid RecyclerView:java.lang.NullPointerException:空对象引用上的 CartRecyclerAdapter$CustomViewHolder.getAdapterPosition()'
【发布时间】:2017-03-30 12:32:43
【问题描述】:

//这是我的回收站视图代码,错误是Android RecyclerView:java.lang.NullPointerException: CartRecyclerAdapter$CustomViewHolder.getAdapterPosition()' on a null object reference

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

【问题讨论】:

    标签: java android nullpointerexception android-recyclerview material-design


    【解决方案1】:

    你得到空指针异常是因为CustomViewHolder holder = (CustomViewHolder) view.getTag(); 这一行给出了空值。因为 view.getTag() 为空。这可能是因为在调用 onClickListener 之前,您没有使用 view.setTag() 为视图设置标签。

    【讨论】:

      【解决方案2】:

      我认为您在 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() 方法中给出的位置

      【讨论】:

        猜你喜欢
        • 2021-10-12
        • 1970-01-01
        • 2018-12-31
        • 1970-01-01
        • 2018-12-31
        • 2016-10-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多