如何从类的方法传递意图的上下文?

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

【讨论】:

静态上下文对象会导致内存泄漏..查看上下文和适配器类的文档..

以上是关于如何从类的方法传递意图的上下文?的主要内容,如果未能解决你的问题,请参考以下文章

从类库访问用户上下文

从类组件更新 Reacts 上下文值

Android:调用 Activity 时应用程序关闭。意图,上下文,字符串[重复]

在android中传递上下文

如何获取所选列表视图项中的id以打开上下文菜单并通过下一个活动来实现目标。

将上下文传递给许多方法是否正常?