【发布时间】:2019-05-30 08:39:44
【问题描述】:
我的 Activity 中有两个片段:Fragment_A 和 Fragment_B。
在片段 A 中,我创建了一个 AsyncTask(当用户“滑动刷新”屏幕时)。在这个任务的onPostExecute() 中,我想显示一个 Toast :
private class MakeRequestTask extends AsyncTask<Void, Void, List<String>> {
private Exception mLastError = null;
MakeRequestTask() {
//Some stuff
}
@Override
protected List<String> doInBackground(Void... params) {
//Some stuff
}
@Override
protected void onPreExecute() {
//Some stuff
}
@Override
protected void onPostExecute(List<String> output) {
swipeRefreshLayout.setRefreshing(false);
Toast.makeText(getActivity(), "TO_DISPLAY", Toast.LENGTH_SHORT).show();
}
}
@Override
protected void onCancelled() {
swipeRefreshLayout.setRefreshing(false);
//Some stuff
}
}
如果用户在 AsyncTask 完成之前从 Fragment_A 更改为 Fragment_B,我会崩溃:
java.lang.IllegalStateException:Fragment Fragment_A 未附加到上下文。
我知道如何避免崩溃(通过添加条件 isAdded()),但我希望无论哪个 Fragment 在我的 Activity 上显示/激活,我都希望显示我的 Toast。
【问题讨论】:
-
不是通过调用 getActivity() 来获取 onPostExecute 中的活动,而是在构造函数中传递活动或上下文。这样,asyncTask 就已经拥有了它需要的一切。
-
也不工作。一旦片段消失,上下文就会丢失。仅供参考,在 Fragment_A 中声明了“私有类 MakeRequestTask”。
-
检查我的答案并尝试并告诉我
标签: android