Java RecyclerView适配器上的上下文
我试图将java类中的上下文发送到Java RecyclerView适配器上的上下文,java,android,android-recyclerview,android-adapter,Java,Android,Android Recyclerview,Android Adapter,我试图将java类中的上下文发送到RecyclerView的适配器,这样我就可以单击元素并重定向到意图。显然,上下文不正确。我已经评论了它的台词,这个应用程序也可以运行,但一旦我试图证明它,它又开始崩溃了。 我假设这是一个上下文问题,但是如果有另一种方法为我的元素设置click方法,这将非常有用 它引发的异常为空指针异常: java.lang.RuntimeException:无法启动活动: java.lang.NullPointerException:尝试调用虚拟方法“void” androi
RecyclerView
的适配器,这样我就可以单击元素并重定向到意图。显然,上下文不正确。我已经评论了它的台词,这个应用程序也可以运行,但一旦我试图证明它,它又开始崩溃了。
我假设这是一个上下文问题,但是如果有另一种方法为我的元素设置click方法,这将非常有用
它引发的异常为空指针异常:
java.lang.RuntimeException:无法启动活动:
java.lang.NullPointerException:尝试调用虚拟方法“void”
android.widget.Button.setOnClickListener(android.view.view$OnClickListener)'
关于空对象引用
以下是适配器代码:
public class SubsidioAdapter extends RecyclerView.Adapter<SubsidioAdapter.SubsidioViewHolder> {
private Context context;
private List<Producto> productoList;
private LayoutInflater inflater;
public SubsidioAdapter(Context context, List<Producto> productoList) {
this.context = context;
this.productoList = productoList;
this.inflater = LayoutInflater.from(context);
}
@Override
public SubsidioViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
View view = this.inflater.inflate(R.layout.producto_item, null);
return new SubsidioViewHolder(view);
}
@Override
public void onBindViewHolder(SubsidioViewHolder subsidioViewHolder, int position) {
subsidioViewHolder.imageView.setImageResource(this.productoList.get(position).getFoto());
subsidioViewHolder.textView1.setText(this.productoList.get(position).getNombre());
subsidioViewHolder.textView2.setText(this.productoList.get(position).getDescripcion());
subsidioViewHolder.textView3.setText(this.productoList.get(position).getPrecio());
subsidioViewHolder.itemView.setOnClickListener(new View.OnClickListener() {
public void onClick(View view) {
context.startActivity(new
Intent(context, ModificarProductoActivity.class));
}
});
}
@Override
public int getItemCount() {
return this.productoList.size();
}
public class SubsidioViewHolder extends RecyclerView.ViewHolder {
ImageView imageView;
TextView textView1;
TextView textView2;
TextView textView3;
public SubsidioViewHolder(View itemView) {
super(itemView);
this.imageView = itemView.findViewById(R.id.fotoSub);
this.textView1 = itemView.findViewById(R.id.descSub);
this.textView2 = itemView.findViewById(R.id.nombreSub);
this.textView3 = itemView.findViewById(R.id.precioSub);
}
}
}
公共类SubsidioAdapter扩展了RecyclerView.Adapter{
私人语境;
私人上市生产商;
私人充气机;
公共子系统适配器(上下文,列表productoList){
this.context=上下文;
this.productoList=productoList;
this.inflater=layoutiner.from(上下文);
}
@凌驾
公共子系统ViewHolder onCreateViewHolder(@NonNull ViewGroup ViewGroup,int i){
视图=此.inflater.inflate(R.layout.producto_项,空);
返回新的子视图持有者(视图);
}
@凌驾
BindViewHolder上的公共无效(SubsidioViewHolder SubsidioViewHolder,int位置){
subsidioViewHolder.imageView.setImageResource(this.productoList.get(position.getFoto());
subsidioViewHolder.textView1.setText(this.productoList.get(position.getNombre());
subsidioViewHolder.textView2.setText(this.productoList.get(position.getDescription());
subsidioViewHolder.textView3.setText(this.productoList.get(position.getPrecio());
subsidioViewHolder.itemView.setOnClickListener(新视图.OnClickListener(){
公共void onClick(视图){
上下文。startActivity(新)
意图(上下文,ModificarProductoActivity.class));
}
});
}
@凌驾
public int getItemCount(){
返回此.productoList.size();
}
公共类子类ViewHolder扩展了RecyclerView.ViewHolder{
图像视图图像视图;
文本视图文本视图1;
文本视图文本视图2;
文本视图文本视图3;
公共子视图持有者(视图项视图){
超级(项目视图);
this.imageView=itemviewbyd(R.id.fotoSub);
this.textView1=itemView.findViewById(R.id.descSub);
this.textView2=itemView.findViewById(R.id.nombreSub);
this.textView3=itemView.findViewById(R.id.precioSub);
}
}
}
将id设置为适配器项布局的根元素,然后按id查找该视图,并使用它而不是项视图
,
而不是:
subsidioViewHolder.itemView.setOnClickListener(new View.OnClickListener(){
public void onClick(View view) {
...
}
});
使用:
。请记住,您可以在onCreateViewHolder()内的recyclerView适配器中获取上下文,而无需使用以下构造函数:
@Override
public SubsidioViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
context=viewGroup.getContext();
View view = this.inflater.inflate(R.layout.producto_item, null);
return new SubsidioViewHolder(view);
}
尽管您的问题似乎与有关,但它是一个空指针异常:java.lang.RuntimeException:无法启动activity ComponentInfo{com.example.proingsoftware/proingsoftware.activities.functionario.ModificarProductoActivity}:java.lang.NullPointerException:尝试在空对象引用上调用虚拟方法“void android.widget.Button.setOnClickListener(android.view.view$OnClickListener)”。它不是按钮,而是我的回收器视图中的元素,在单击的任何元素上,它都应该表示您的异常显示
尝试调用虚拟方法'void android.widget.Button.setOnClickListener(android.view.view$OnClickListener)'在空对象引用上
,这意味着您正在空按钮上设置侦听器
,但没有声明任何按钮,并且我在该活动中不使用任何按钮:(何时发生崩溃?您如何获得崩溃?点击RV的某个项目?
@Override
public SubsidioViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
context=viewGroup.getContext();
View view = this.inflater.inflate(R.layout.producto_item, null);
return new SubsidioViewHolder(view);
}