如何将 Intent 用于 recyclerview 到片段中?

How can I use an Intent into a recyclerview into a fragment?

这是适配器,但是当我单击 cardView 时,应用程序会重新启动。 我尝试在 Holder 中使用 view.getContext() 而不是 context 但应用程序也重新启动。
我必须做什么?
如果我想使用 startActivityForResult

,我必须把 @Override onActivityResult 放在哪里
public class estudioEdit_Adapter extends RecyclerView.Adapter<estudioEdit_Adapter.Holder> {
public List<Estudio> lista;
public Context context;

public estudioEdit_Adapter(List<Estudio> lista, Context context){
    this.lista=lista;
    this.context=context;
}

@Override
public Holder onCreateViewHolder(ViewGroup parent, int viewType) {
    View view= LayoutInflater.from(parent.getContext()).inflate(R.layout.item_estudio_edit,parent,false);
    Holder contendor= new Holder(view);
    return contendor;
}

@Override
public void onBindViewHolder(Holder contendor, int position) {
    contendor.lblNombre.setText(this.lista.get(position).getNombre());
    contendor.lblCentroEstudios.setText(this.lista.get(position).getCentroEstudios());
    contendor.context=this.context;
}

@Override
public int getItemCount() {
    return lista.size();
}

public static class Holder extends RecyclerView.ViewHolder{
    TextView lblNombre, lblCentroEstudios;
    CardView cvEstudio;
    Context context;

    public Holder(View view){
        super(view);
        lblNombre =(TextView) view.findViewById(R.id.lblNombreEstudio);
        lblCentroEstudios =(TextView) view.findViewById(R.id.lblCentroEstudio);
        cvEstudio=(CardView) view.findViewById(R.id.cvEstudio);

        cvEstudio.setOnClickListener(new View.OnClickListener(){
            @Override
            public void onClick(View v) {
                Intent intent = new Intent(context, EstudioEditar.class);
                Activity a=(Activity) context;
                a.startActivity(intent);
            }
        });
    }
}

试试这个

Intent intent = new Intent(context, EstudioEditar.class);
context.startActivity(intent);

你必须喜欢这个,它会帮助你...

有的我也遇到过这种问题,所以我按照下面的方式处理

@Override
public void onBindViewHolder(Holder contendor, int position) {
    contendor.lblNombre.setText(this.lista.get(position).getNombre());
    contendor.lblCentroEstudios.setText(this.lista.get(position).getCentroEstudios());

    contendor.itemView.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {            
                    context.startActivity(new Intent(context, EstudioEditar.class));
                }
            });
}

然后删除这一行

contendor.context=this.context;

因为您已经在构造函数中分配了上下文值

您可以使用任何视图。 getContext() 方法几乎提供了 activity 方法,因为 Activity 扩展了 Context。

v.getContext().startActivity(intent);

您的问题是 context,因为当您触发 startIntent 时它是一个空值,因此您需要在 view holder context 上的 context 上保持 reference。您还可以执行以下操作:-

   cvEstudio.setOnClickListener(new View.OnClickListener(){
        @Override
        public void onClick(View v) {
            Intent intent = new Intent(context, EstudioEditar.class);
            Activity a=(Activity) context;
            v.getContext().startActivity(intent);
        }
    });

或者您需要将上下文传递给您的 viewholder

片段

@Override
public Holder onCreateViewHolder(ViewGroup parent, int viewType) {
    View view= LayoutInflater.from(parent.getContext()).inflate(R.layout.item_estudio_edit,parent,false);
    Holder contendor= new Holder(view,getActivity());
    return contendor;
}

取景器

 public Holder(View view, Context context){
        super(view);
        lblNombre =(TextView) view.findViewById(R.id.lblNombreEstudio);
        lblCentroEstudios =(TextView) view.findViewById(R.id.lblCentroEstudio);
        cvEstudio=(CardView) view.findViewById(R.id.cvEstudio);

        cvEstudio.setOnClickListener(new View.OnClickListener(){
            @Override
            public void onClick(View v) {
                Intent intent = new Intent(context, EstudioEditar.class);
                Activity a=(Activity) context;
                context.startActivity(intent);
            }
        });
    }