如何从类的方法传递意图的上下文?
Posted
技术标签:
【中文标题】如何从类的方法传递意图的上下文?【英文标题】:How to pass context for an intent from a method of a class? 【发布时间】:2020-05-31 10:10:19 【问题描述】:错误:java.lang.NullPointerException:尝试在空对象引用上调用虚拟方法“android.content.Context android.content.Context.getApplicationContext()” 在 com.adriitsolutions.prarthana.AdapterForListView.MyRequestForBloodRequirementListRecyclerView$1.onClick(MyRequestForBloodRequirementListRecyclerView.java:153) 在 android.view.View.performClick(View.java:6935) 这是我的代码。
java ((myViewHolderForRecyclerViewOfMenu) viewHolder).iv_my_request_view.setOnClickListener(new View.OnClickListener() @覆盖 公共无效 onClick(查看 v) // showLeadDetails(位置); context.startActivity(new Intent(context, ViewDonorListActivity.class)); Log.e("ONCLICK", "查看请求"); );
Adapter : @Override
public void onBindViewHolder(@NonNull MyViewHolder holder, int position)
holder.sendAt.setText(mData.get(position).getSendAt());
holder.radius.setText(mData.get(position).getRadius());
holder.acceptedStatus.setText(mData.get(position).getAcceptedStatus());
holder.requestBloodGrpType.setImageResource(mData.get( position ).getRequestBloodGrpType() );
//holder.requestUrgenyType.setImageResource( mData.get( position ).getRequestUrgencyType() );
holder.viewRequest.setOnClickListener( new View.OnClickListener()
@Override
public void onClick(View v)
mContext.startActivity(new Intent(mContext,ViewDonorListActivity.class));
);
/* holder.buttonView.setOnClickListener(new View.OnClickListener()
@Override
public void onClick(View v)
mContext.startActivity(new Intent(mContext,ViewDonorListActivity.class));
);*/
【问题讨论】:
你可以从View v
获取上下文,我相信只要使用v.getContext就可以了
请分享您调用适配器的适配器类和活动/片段
@a_local_nobody public void onBindViewHolder(@NonNull final RecyclerView.ViewHolder viewHolder, final int position) 这是我作为 args 传递的内容
@KishanMaurya 我现在已经分享了。
【参考方案1】:
只需使用 ViewHolder 的 itemView 中的 context -
解决方案
Context context = holder.itemView.getContext();
context.startActivity(new Intent(context,ViewDonorListActivity.class));
【讨论】:
【参考方案2】:您应该发布完整的适配器类,因为我们应该看到您在哪里初始化 mContext。但默认情况下,您可以通过适配器的构造方法获取上下文。
类似:
private List<Obj> list;
private Context mContext;
public AdapterRvBid(List<Obj> list, Context mContext)
this.list = list;
this.mContext= mContext;
【讨论】:
无需将上下文传递给回收器适配器,您可以从查看器中获取它【参考方案3】:我在我的主要活动中进行了这样的编辑:
public static Context mContext;
public static Context getContext()
return mContext;
后来使用这个上下文,我能够传递一个调用另一个活动的意图!
Intent intent = new Intent( MyRequestActivity.getContext() , ViewDonorListActivity.class );
MyRequestActivity.getContext().startActivity( intent );
【讨论】:
静态上下文对象会导致内存泄漏..查看上下文和适配器类的文档..以上是关于如何从类的方法传递意图的上下文?的主要内容,如果未能解决你的问题,请参考以下文章
Android:调用 Activity 时应用程序关闭。意图,上下文,字符串[重复]