如何将Intent用于回收者视图中的片段? [关闭]

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何将Intent用于回收者视图中的片段? [关闭]相关的知识,希望对你有一定的参考价值。

这是适配器,但当我单击cardView时,应用程序重新启动。我试图在持有人中使用view.getContext()而不是context,但是应用程序也重启了。 我该怎么办? 如果我想使用@Override onActivityResult,我必须把startActivityForResult放在哪里

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);
            }
        });
    }
}
答案

你的问题是context,因为当你解雇startIntent时它是一个空值,所以你需要在reference上的context上持有view holder context。你也可以做以下事情: -

   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);
        }
    });

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

分段

@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;
}

viewholder

 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);
            }
        });
    }
另一答案

试试这个

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扩展了Context。

v.getContext().startActivity(intent);

以上是关于如何将Intent用于回收者视图中的片段? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

如何将数据从 Intent 传递到 Fragment

android MVP - 我可以有多个演示者用于自定义视图和片段

如何将回收器视图添加到片段

如何在视图绑定中的活动中获取回收者视图当前项目文本值

如何将值从一个片段的回收器视图项传递到另一个片段

从片段类中的对话框添加项目到recyclerview。