我正在从adatper调用一个向我显示错误的片段的方法

问题描述 投票:0回答:1

这是面临“尝试在空对象引用上调用虚拟方法'void com.mobex.inapp.Fragment.ItemListFragment.updateItem()'的错误m 在com.mobex.inapp.Adapter.ItemAdp $ 2.onClick(ItemAdp.java:160)“我尝试了初始化,并且也做了一切,但没有任何效果

适配器代码

 public class ItemAdp extends RecyclerView.Adapter<ItemAdp.MyViewHolder>{

        List<ProductItem> mList;

        private ItemClickListener mClickListener;
        Context context;
        String Base_URL;
        private int screenWidth;
        public static ItemListFragment itemListFragment;

        public ItemAdp(List<ProductItem> mList, Context context) {
            this.mList = mList;
            this.context = context;
            WindowManager wm = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);
            Display display = wm.getDefaultDisplay();
            Point size = new Point();
            display.getSize(size);
            screenWidth = size.x;
        }



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

            ImageView img_icon;
            TextView txtTitle, group_Name, price;
            LinearLayout lvlSubitem;


            public MyViewHolder(@NonNull View itemView) {
                super(itemView);
                img_icon = itemView.findViewById(R.id.img_icon);
                txtTitle = itemView.findViewById(R.id.txtTitle);
                group_Name = itemView.findViewById(R.id.group_Name);
                lvlSubitem = itemView.findViewById(R.id.lvl_subitem);
                price = itemView.findViewById(R.id.price);
            }

            @Override
            public void onClick(View view) {
                if (mClickListener != null) mClickListener.onItemClick(view, getAdapterPosition());
            }
        }

        @NonNull
        @Override
        public MyViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
            LayoutInflater layoutInflater = LayoutInflater.from(context);
            View view = layoutInflater.inflate(R.layout.item_custome, parent, false);

            return new MyViewHolder(view);
        }

        @Override
        public void onBindViewHolder(@NonNull MyViewHolder holder, int position) {
            ProductItem datum = mList.get(position);
            //  Glide.with(context).load(Base_URL + "/" + datum.getArticleImage()).thumbnail(Glide.with(context).load(R.drawable.ezgifresize)).into(holder.img_icon);
            holder.txtTitle.setText("" + datum.getArticleName());
            holder.group_Name.setText("" + datum.getGroupName());
            holder.price.setText("₹" + datum.getArticlePrice().toString());
            //  txt_price.setText(sessionManager.getStringData(CURRUNCY)  + priceList.get(i).getProductPrice());
            setJoinPlayrList(holder.lvlSubitem, datum);

        }

        public interface ItemClickListener {
            void onItemClick(View view, int position);
        }

        private void setJoinPlayrList(LinearLayout lnrView, ProductItem datum) {

            lnrView.removeAllViews();
            final int[] count = {0};
            MobexInAppDb helper = new MobexInAppDb(lnrView.getContext());

            LayoutInflater inflater = LayoutInflater.from(context);

            View view = inflater.inflate(R.layout.custome_prize, null);

            TextView txtcount = view.findViewById(R.id.txtcount);
            LinearLayout img_mins = view.findViewById(R.id.img_mins);
            LinearLayout img_plus = view.findViewById(R.id.img_plus);
            MyCart myCart = new MyCart();
            myCart.setPID(datum.getEan());
            myCart.setImage(datum.getArticleImage());
            myCart.setTitle(datum.getArticleName());
            myCart.setCost(datum.getArticlePrice());
            int qrt = helper.getCard(myCart.getPID(), myCart.getCost());
            if (qrt != -1) {
                count[0] = qrt;
                txtcount.setText("" + count[0]);
                txtcount.setVisibility(View.VISIBLE);
            } else {
                txtcount.setVisibility(View.VISIBLE);
                img_mins.setVisibility(View.VISIBLE);
            }
            img_mins.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {

                    count[0] = Integer.parseInt(txtcount.getText().toString());

                    count[0] = count[0] - 1;
                    if (count[0] <= 0) {
                        img_mins.setVisibility(View.VISIBLE);
                        txtcount.setText("0");
                        txtcount.setVisibility(View.VISIBLE);
                        helper.deleteRData(myCart.getPID(), myCart.getCost());
                    } else {
                        txtcount.setVisibility(View.VISIBLE);
                        txtcount.setText("" + count[0]);
                        myCart.setQty(String.valueOf(count[0]));
                        Log.e("INsert", "--> " + helper.insertData(myCart));
                    }
                    itemListFragment.updateItem(); //The Error occur here
                }
            });

            img_plus.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    txtcount.setVisibility(View.VISIBLE);
                    img_mins.setVisibility(View.VISIBLE);
                    count[0] = Integer.parseInt(txtcount.getText().toString());

                    count[0] = count[0] + 1;
                    txtcount.setText("" + count[0]);
                    myCart.setQty(String.valueOf(count[0]));
                    Log.e("INsert", "--> " + helper.insertData(myCart));
                    itemListFragment.updateItem(); //The Error occur here
                }
            });

            lnrView.addView(view);
        }


        @Override
        public int getItemCount() {
            return mList.size();
        }
    }

片段代码

public class ItemListFragment extends Fragment {
    RecyclerView myRecyclerView;
    List<ProductItem> mlist;
    MobexInAppDb mobexInAppDb;
    TextView txtItem, txtPrice;
    LinearLayout lvlbacket;
    ItemAdp itemAdp;
    public static ItemListFragment itemListFragment;

    public static ItemListFragment getInstance() {
        return itemListFragment;
    }

    public ItemListFragment() {
        // Required empty public constructor
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        // Inflate the layout for this fragment
        View view = inflater.inflate(R.layout.fragment_home, container, false);
        mobexInAppDb = new MobexInAppDb(getContext());
        myRecyclerView = view.findViewById(R.id.my_recycler_view);
        itemListFragment = this;
        txtPrice = view.findViewById(R.id.txt_price);
        txtItem = view.findViewById(R.id.txt_item);
        lvlbacket = view.findViewById(R.id.lvlbacket);
        itemAdp = new ItemAdp(mlist, getContext());
        myRecyclerView.setAdapter(itemAdp);
        myRecyclerView.setLayoutManager(new LinearLayoutManager(getActivity()));


        Cursor res = mobexInAppDb.getAllData1();
        if (res.getCount() == 0) {
            lvlbacket.setVisibility(View.GONE);
        } else {
            lvlbacket.setVisibility(View.VISIBLE);
            updateItem();
        }
        return view;
    }

    @Override
    public void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        mobexInAppDb = new MobexInAppDb(getContext());
        mlist = new ArrayList<>();
        mlist = mobexInAppDb.getAllData();

    }

    public void updateItem() {
        mobexInAppDb = new MobexInAppDb(getContext());
        try {
            Cursor res = mobexInAppDb.getAllData1();
            if (res.getCount() == 0) {
                lvlbacket.setVisibility(View.GONE);
            } else {
                lvlbacket.setVisibility(View.VISIBLE);

                double totalRs = 0;
                double ress = 0;
                int totalItem = 0;
                while (res.moveToNext()) {
                    MyCart rModel = new MyCart();
                    rModel.setCost(res.getString(5));
                    rModel.setQty(res.getString(6));
                    ress = (Integer.parseInt(res.getString(5)) * rModel.getDiscount()) / 100;
                    ress = Integer.parseInt(res.getString(5)) - ress;
                    double temp = Integer.parseInt(res.getString(6)) * ress;
                    totalItem = totalItem + Integer.parseInt(res.getString(6));
                    totalRs = totalRs + temp;
                }
//            txtPrice.setText("Total : " + totalRs);

                txtItem.setText("Total Item:(" + totalItem + ")");
                txtPrice.setText("₹" + totalRs);
            }
        } catch (Exception e) {

        }
    }

    @OnClick(R.id.txt_gocart)
    public void onViewClicked() {
        CartFragment fragment = new CartFragment();
        Home.getInstance().callFragment(fragment);
    }
}
android android-studio android-fragments recycler-adapter
1个回答
0
投票

无论使用适配器构造器来传递片段实例都是这样,

public class ItemAdp extends RecyclerView.Adapter<ItemAdp.MyViewHolder>{

        List<ProductItem> mList;

        private ItemClickListener mClickListener;
        Context context;
        String Base_URL;
        private int screenWidth;
        public ItemListFragment mItemListFragment;

        public ItemAdp(List<ProductItem> mList, Context context, ItemListFragment itemListFragment) {
            this.mList = mList;
            this.context = context;
            WindowManager wm = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);
            Display display = wm.getDefaultDisplay();
            Point size = new Point();
            display.getSize(size);
            screenWidth = size.x;
this.mItemListFragment = itemListFragment;
        }
}

OnClick方法中,将mItemListFragment用作,

mItemListFragment.updateItem(); //the fragment instance is not null now

或另一种方式是,

ItemListFragment.itemListFragment.updateItem(); //this will use fragments static instance declared

注意,在更新项目之前,请添加条件以检查实例是否不为空。

© www.soinside.com 2019 - 2024. All rights reserved.