在分离的片段中获取上下文/活动?

Posted

技术标签:

【中文标题】在分离的片段中获取上下文/活动?【英文标题】:Get context/activity in detached fragment? 【发布时间】:2015-05-02 18:07:02 【问题描述】:

有一个similar question,其中大多数回答建议使用getActivity() 以获得片段的上下文,但是如果片段被分离,如何获取对活动/上下文的引用(在这种情况下,@ 987654324@返回null)?

我的情况是我的片段启动了一个 AsyncTask,它在完成时调用我片段的 onSuccess() 方法。但是我的片段的onSuccess() 方法需要上下文才能显示 Toast 消息或访问共享首选项。那么有没有可靠的获取上下文的方法呢?

我正在考虑的一种方法是将上下文对象传递给我的 AsyncTask 构造函数,然后将其传递回我前面提到的onSuccess() 回调方法——但这会导致内存泄漏吗?

(注意 - 有一个答案 here 显示了如何检索当前活动,但同样,它需要一个有效的上下文。)

【问题讨论】:

你试过 getApplicationContext() 了吗? onattach 方法首先被调用,因为你将获得活动引用,存储它并使用它。 【参考方案1】:

在你的片段中使用它:

private Context context;

@Override
public void onAttach(Activity activity) 
    super.onAttach(activity);
    context = activity;

然后在你想要的地方使用context

【讨论】:

谢谢,但是这种方法有可能导致内存泄漏吗?【参考方案2】:

你应该在创建视图后存储上下文,当你进入片段时。

    Context context;

   @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) 

        View rootView = inflater.inflate(R.layout.fragment_photos, container, false);
        MainView = rootView;
        context = getActivity().getApplicationContext();
        return rootView;
    

在您的片段中使用该上下文,无论您想要什么。

【讨论】:

以上是关于在分离的片段中获取上下文/活动?的主要内容,如果未能解决你的问题,请参考以下文章

片段活动中的 ListView 适配器上下文错误,我该怎么办?

片段活动错误中的ListView Adapter上下文,我该怎么办?

何时片段不附加到活动而仅附加到上下文?

上下拖动片段

将活动上下文传递给片段内的getLastLocation的更好方法

如何在多片段活动中处理 onContextItemSelected?