我在tablayout内创建cardview,但是在适配器类中遇到错误。下面是logcat,adapter类和Demo java类。我试图在google以及stackover流中进行查找,但是不幸的是,我无法找到解决方案。请帮助我解决此错误,因为我是android的初学者。
logcat
2019-04-06 22:14:37.450 32524-32524/com.example.counter E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.counter, PID: 32524
java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.Object android.content.Context.getSystemService(java.lang.String)' on a null object reference
at android.view.LayoutInflater.from(LayoutInflater.java:229)
at com.example.counter.MyAdapter.onCreateViewHolder(MyAdapter.java:43)
at com.example.counter.MyAdapter.onCreateViewHolder(MyAdapter.java:28)
适配器类
public class MyAdapter extends RecyclerView.Adapter<MyAdapter.ProductViewHolder> { // error getting
private Context context;
private List<Demo> demos;
public MyAdapter(Context context, List<Demo> demos) {
this.context = context;
this.demos = demos;
}
@NonNull
@Override
public ProductViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) { // error getting
LayoutInflater layoutInflater = LayoutInflater.from(context);
View view = layoutInflater.inflate(R.layout.list_layout, viewGroup, false);
return new ProductViewHolder(view);
}
@Override
public void onBindViewHolder(@NonNull ProductViewHolder productViewHolder, int i) {
final Demo demo = demos.get(i);
productViewHolder.textview1.setText(demo.getTextview1());
productViewHolder.textview2.setText(demo.getTextview2());
productViewHolder.cardView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String tv1 = demo.getTextview1();
Intent intent = new Intent(context, MainActivity.class);
intent.putExtra("text_1", tv1);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(intent);
((Activity)context).finish();
Animatoo.animateSlideRight(context);
}
});
}
@Override
public int getItemCount() {
return demos.size();
}
public class ProductViewHolder extends RecyclerView.ViewHolder {
TextView textview1, textview2;
CardView cardView;
public ProductViewHolder(@NonNull View itemView) {
super(itemView);
textview1 = itemView.findViewById(R.id.textview1);
textview2 = itemView.findViewById(R.id.textview2);
cardView = itemView.findViewById(R.id.cardview);
}
}
}
演示班
public class Demo {
private String textview1,textview2;
public Demo(String textview1, String textview2) {
this.textview1 = textview1;
this.textview2 = textview2;
}
public String getTextview1() {
return textview1;
}
public String getTextview2() {
return textview2;
}
}
Frag1.Java
public class Frag1 extends Fragment {
RecyclerView recyclerView;
RecyclerView.Adapter adapter;
Context c;
@Override
public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view=inflater.inflate(R.layout.frag_1,container,false);
recyclerView=view.findViewById(R.id.recyclerview);
recyclerView.setHasFixedSize(true);
recyclerView.setLayoutManager(new LinearLayoutManager(c));
ArrayList<Demo> demoList=new ArrayList<>();
demoList.add(new Demo("A","B"));
adapter=new MyAdapter(c,demoList);
recyclerView.setAdapter(adapter);
return view;
}
}
答案 0 :(得分:-1)
Context
显然为空。您应该在Frag1类中传递getActivity()
而不是Context
。
adapter=new MyAdapter(getActivity(),demoList);