如何将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用于回收者视图中的片段? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章