循环器视图的适配器上的上下文

0 人关注

我试图从我的java类发送上下文到我的 RecyclerView 的适配器,这样我就可以点击元素并被重定向到一个意图。很明显,上下文是不对的。我已经评论了它的行,应用程序可以工作,但是当我试图证明它时,它又开始崩溃了。 我想这是上下文的问题,但如果有其他方法可以为我的元素设置一个点击方法,那将是非常有用的。

它抛出的异常是一个空指针异常。

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);
    
5 个评论
它是一个空指针异常: java.lang.RuntimeException。无法启动活动 ComponentInfo{com.example.proingsoftware/proingsoftware.events.funcionario.ModificarProductoActivity}: java.lang.NullPointerException。试图对一个空对象引用调用虚拟方法'void android.widget.Button.setOnClickListener(android.view.View$OnClickListener)'。
它不是一个按钮,它是我的回收器视图中的一个元素,在任何元素被点击时,它都应该意图
你的异常说的是 Attempt to invoke virtual method 'void android.widget.Button.setOnClickListener(android.view.View$OnClickListener)' on a null object reference ,这意味着你在为一个空的 Button 设置一个监听器。
但没有声明任何按钮,而我没有在该活动中使用任何按钮。
崩溃何时发生?你怎么做才会发生崩溃?点击房车的某个项目?
java
android
android-recyclerview
android-adapter
Fernanda Martínez
Fernanda Martínez
发布于 2020-12-06
1 个回答
Salar Arabpour
Salar Arabpour
发布于 2020-12-06
已采纳
0 人赞同

为适配器项目布局的根元素设置一个id,然后通过id找到该视图并使用它来代替 itemView 。, 而不是【替换代码】。

subsidioViewHolder.itemView.setOnClickListener(new View.OnClickListener(){
        public void onClick(View view) {
subsidioViewHolder.rootLayout.setOnClickListener(new View.OnClickListener(){
            public void onClick(View view) {

......记住,你可以在onCreateViewHolder()中获得recyclerView适配器的上下文,而不需要像这样使用构造函数。

@Override
public SubsidioViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
    context=viewGroup.getContext();