这是面临“尝试在空对象引用上调用虚拟方法'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);
}
}
无论使用适配器构造器来传递片段实例都是这样,
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
注意,在更新项目之前,请添加条件以检查实例是否不为空。