我有一个主Activity
,其中包含一个带有4个标签的ViewPager
。每个标签内都有fragment
。我在主ActionBar.TabListener
上实施了Activity
。在OnTabSelected
方法中,我在选定的fragment.refresh
上调用自定义fragment
方法,以便从服务器刷新并更新fragment
。 refresh
方法会重置数据。
当我关闭应用程序时,过了一会儿,我重新打开它,我在NullPointerException
的{{1}}返回的主视图上获得OnCreateView
。
我的问题是:如何在调用fragment
后保留片段的主视图?或者,如何确保OnDestroyView
是refresh
调用OnCreateView
之后调用? (我应该使用带有while循环的标志吗?)
答案 0 :(得分:1)
您可以尝试将自定义fragment.refresh()放入fragment.onResume()中。这样,在向用户显示片段之前,将自动调用刷新。
如果您真的只想在用户点击标签时更新片段,您可以这样做:
refresh(){
if(getActivity()!=null && !isDetached()){ // check if fragment is visible
refreshData(); // refresh data
}else{
needRefresh=true; // set flag for refresh
}
}
和
onCreate(...){
...
if(needRefresh){
needRefresh = false;
refreshData();
}
}
我认为你应该采用第一种解决方案,因为我担心第二种解决方案可能并不完美。
答案 1 :(得分:1)
我希望我能正确理解你。首先是你的陈述,
如何在OnDestroyView之后保留片段的主视图 叫?
您无法将视图对象缓存在内存中,尤其是在OnDestroyView()之后。
回答你的第二个问题,你可以在Fragment中的覆盖方法中调用你的自定义refresh(),如:
@Override
public void onViewCreated(View view, Bundle savedInstanceState) {
refresh();
...
}
OnCreateView()
之后调用refresh()。onTabSelected
()。但似乎你对此并不感兴趣。