java - android.content.Context.getResources() 在空对象引用上
问题描述
我有 2 个类,一个 RecyclerView 的 Adapter 类和一个 Fragment 类。当我在 Adapter 中执行 setOnclick 并调用 Fragment 类的方法时,应用程序崩溃。
java.lang.NullPointerException: Attempt to invoke virtual method 'android.content.res.Resources android.content.Context.getResources()' on a null object reference
at android.widget.Toast.makeText(Toast.java:313)
at com.ltud.food.Fragment.restaurantDetail.detailTabLayout.detail_datdonFragment.onAddProduct(detail_datdonFragment.java:134)
at com.ltud.food.Fragment.restaurantDetail.detailTabLayout.FoodAdapter$1.onClick(FoodAdapter.java:73)
at android.view.View.performClick(View.java:7155)
at android.view.View.performClickInternal(View.java:7124)
at android.view.View.access$3500(View.java:808)
at android.view.View$PerformClick.run(View.java:27370)
at android.os.Handler.handleCallback(Handler.java:883)
at android.os.Handler.dispatchMessage(Handler.java:100)
at android.os.Looper.loop(Looper.java:359)
at android.app.ActivityThread.main(ActivityThread.java:7418)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:492)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:935)
适配器类:
@Override
public void onBindViewHolder(@NonNull @NotNull foodViewHolder holder, int position) {
Food food = foodArrayList.get(position);
holder.name.setText(food.name);
holder.price.setText(String.valueOf(food.price));
holder.rate.setText(String.valueOf(food.rate));
Glide.with(holder.food.getContext()).load(food.img).into(holder.food);
holder.add_food.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// i++;
// Toast.makeText(context,String.valueOf(i),Toast.LENGTH_SHORT).show();
if (!foodArrayList.get(position).isAddedTocart()){
foodArrayList.get(position).setAddedTocart(true);
detail_datdonFragment detail = new detail_datdonFragment();
detail.onAddProduct();
}
}
});
}
分段:
@Override
public void onAddProduct() {
cart_count++;
Toast.makeText(context,cart_count,Toast.LENGTH_SHORT).show();
}
界面:
public interface AddCallbacks {
public void onAddProduct();
}
我现在该怎么办。有人能帮我吗?
解决方案
试试下面的代码,它会对你有所帮助。
class DetailsFragment extends Fragment implements RVAdapter.AddCallbacks {
@Override
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
RVAdapter rvAdapter = new RVAdapter();
rvAdapter.setCallback(this);
}
@Override
public void onAddProduct(int pos) {
Toast.makeText(context,""+cart_count,Toast.LENGTH_SHORT).show();
}
}
// this is your adapter class
class RVAdapter extends RecyclerView.Adapter<RVAdapter.RVHolder> {
private AddCallbacks addCallbacks;
public void setCallback(AddCallbacks addCallbacks) {
this.addCallbacks = addCallbacks;
}
@NonNull
@Override
public RVHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
return null;
}
@Override
public void onBindViewHolder(@NonNull RVHolder holder, int position) {
holder.add_food.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View v) {
addCallbacks.onAddProduct(position);
}
});
}
@Override
public int getItemCount() {
return 0;
}
public interface AddCallbacks {
public void onAddProduct(int pos);
}
class RVHolder extends RecyclerView.ViewHolder {
public RVHolder(@NonNull View itemView) {
super(itemView);
}
}
}
推荐阅读
- node.js - NodeJS MongoDB驱动程序:在插入时指定字段类型
- c# - 使用嵌套视图时 Prism 7 抛出和异常
- javascript - React redux - 输入字段不允许我输入
- python - 循环通过逻辑回归参数以找到最佳模型,但无法复制它
- php - Composer 要求内存不足。PHP 致命错误:允许的内存大小为 1610612736 字节已用尽 Voyager
- performance - 如何减少 tensorflow 数据集输入管道主机设备 (cpu) 时间(目前约为 40%)?
- bootstrap-4 - 使用 Bootstrap 有条件地更改列的布局
- python - MongoDB 聚合属性模式管道/查询
- javascript - 页面重新加载/刷新后如何通过搜索功能执行本地存储值
- java - 从 DescribeSObjectResult 转换为 JsonArray(或 HttpEntity)