如何将 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);
}
});
}
这是适配器,但是当我单击 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);
}
});
}