从片段中获取适配器中的活动上下文

Adr*_*ano 12 android android-listview android-fragments android-activity

我有Fragment一个ListView.在适配器中我想创建一个对话框.

class ViewHolder {
...
  @Override
  public void onClick(View v) {
    ...
    AlertDialog.Builder builder = new AlertDialog.Builder(mContext);
    ...
   }
...
}
Run Code Online (Sandbox Code Playgroud)

mContextContext我的Fragment,我在创建适配器时保存全局.我收到了错误.

unable to add window -- token null is not for an application

该方法getActivity()不可用,所以如何得到Context我的Activity

dan*_*c05 26

如果您有自定义适配器,请将构造函数更改为require Context作为参数.

public CustomAdapter(Context context, List<Item> items) {   
}
Run Code Online (Sandbox Code Playgroud)

然后,创建一个Instance变量以通过构造函数存储上下文.

private Context mContext; //instance variable

public CustomAdapter(Context context, List<Item> items) {
    //some code
    this.mContext= context;
}
Run Code Online (Sandbox Code Playgroud)

现在,您可以mContext在适配器的任何位置使用该变量.

要创建适配器,只需从活动创建时传递'this',或者getActivity()从片段创建.

mAdapter = new CustomAdapter(this, mArrayItems);
Run Code Online (Sandbox Code Playgroud)

希望有所帮助.

  • 这也是对的,但是当你将 LeakCanary 与你的应用程序集成时,LeakCanary 会捕获它并说它可能会导致内存泄漏,我们应该将其删除。您可以通过以下方式获取上下文,而不是像这样发送上下文:holder.mView.getContext() (2认同)

Mic*_* Z. 15

在创建适配器时,您将什么作为上下文传递?this如果你没有这样做,试着通过.一些更多的代码也会有所帮助.