Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/231.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java RecyclerView适配器上的上下文_Java_Android_Android Recyclerview_Android Adapter - Fatal编程技术网

Java RecyclerView适配器上的上下文

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

我试图将java类中的上下文发送到
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);
}