有一个类似的问题,大多数人都回答了使用getActivity()
来获取片段上下文的建议,但如果片段被分离(在这种情况下,getActivity()
返回null),如何获得对活动/上下文的引用?
我的情况是,我的片段启动了一个AsyncTask,该任务在完成时调用我的片段的onSuccess()
方法。但是我的片段的onSuccess()
方法需要一个上下文来显示Toast消息或访问共享的首选项。那么,有没有一种可靠的方法来获取上下文呢?
我正在考虑的一种方法是将上下文对象传递到我的AsyncTask构造函数中,并将其传递回前面提到的onSuccess()
回调方法,但这会导致内存泄漏吗?
(注意-这里有一个答案显示了如何检索当前活动,但同样,它需要一个有效的上下文。)
在你的片段中使用这个:
private Context context;
@Override
public void onAttach(Activity activity) {
super.onAttach(activity);
context = activity;
}
然后在需要的地方使用context
。
您应该在创建视图后,在片段中输入时存储上下文。
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;
}
在你的片段中使用该上下文,无论你想在哪里。