我有一个片段,它在布局中包含MapView
(但它与我要问的问题无关,但请记住它。):
public class MyFragment extends Fragment {
// I have a variable used to cache data in onPause()
private MyData mData;
@BindView(R.id.map)
MapView mMapView;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// I initiate my data in onCreate()
mData = new MyData();
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.mylayout, container, false);
if (mMapView != null) {
// initiate map view
mMapView.onCreate(savedInstanceState);
mMapView.getMapAsync(this);
}
}
@Override
public void onResume() {
super.onResume();
}
@Override
public void onPause() {
super.onPause();
// in onPause() I cache the data I got from another instance
mData = someInstance.getHoldData();
}
/*map view callback! Here, I check the value of mData, when comes back to this fragment, it always get called*/
@Override
public void onMapReady(GoogleMap googleMap) {
// I use data here, when comes back to this fragment, this is always called.
// PROBLEM: sometimes mData is null, why?
checkCachedData(mData);
}
}
所以,这就是我上面的内容:
我在MyFragment的mData
回调中启动onCreate()
,只调用一次。
我准备了onCreateView(...)
中的地图视图,该视图在返回此片段时始终会调用。
我将数据缓存在onPause()
onCreate()
的{p> MyFragment
。
问题:当我转到另一个片段并返回MyFragment
时,onCreate()
不被调用,这意味着在内存中有仍然是MyFragment的前一个实例。但是,当回到此片段时,有时 mData
在onMapReady(GoogleMap googleMap)
回调中 null 。为什么?我不明白。为什么mData
可以为null& onCreate()没有被调用?
====我通过以下方式切换到另一个片段:===
getTransaction().addToBackStack(myStack).replace(containerId, nextFragment, TAG).commit();
答案 0 :(得分:0)
我认为当你说你有另一个片段时,你的意思是你正在导航,例如,使用导航抽屉。 当您的片段被另一个片段替换时,第一个片段会暂停。这意味着将调用onPause回调。当片段作为前景片段返回时,它将恢复,因此将调用onResume回调。要解决您的问题,您应该: