我在这里有一个非常奇怪的行为。在我的MainActivity
课堂上,我调用了我的DialogFragment
:
EndRoundDialogFragment df = new EndRoundDialogFragment(myVO);
df.show(fragmentManager, "end_round_dialog_fragment");
这个 DialogFragment 的构造函数很简单:
public EndRoundDialogFragment(UserVO vo) {
this.userVO = vo;
}
这个片段里面有一个谷歌地图片段。所以我基本上做的是:
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.end_round_dialog, container, false);
mMap = ((MapFragment)getFragmentManager().findFragmentById(R.id.map_result)).getMap();
mMap.setIndoorEnabled(false);
mMap.setMyLocationEnabled(false);
mMap.setTrafficEnabled(false);
buttonClose.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
mListener.onEndDialogClosed();
userVO = null;
dismissAllowingStateLoss();
}
});
//Rest of the code is manipulating Markers in this map.
因此,当用户单击“关闭”按钮时,我会关闭对话框并且状态丢失是可以的。我什至将 VO 设置为空。
如您所见,我Activity
实现了 Dialog 的 Listener onEndDialogClosed()
。这个方法实现是:
@Override
public void onEndDialogClosed() {
Fragment prev = fragmentManager.findFragmentByTag("end_round_dialog_fragment");
if(prev != null)
fragmentManager.beginTransaction().remove(prev).commit();
new Get5PointsTask().execute();
}
因此,当它关闭时,我也会删除整个片段。
我还在此 DialogFragments 中添加了以下内容,以确保确实从代码中删除了 Google Maps 片段:
@Override
public void onDestroyView() {
super.onDestroyView();
Fragment f = (MapFragment) getFragmentManager().findFragmentById(R.id.map_result);
if (f != null) {
getFragmentManager().beginTransaction().remove(f).commit();
}
}
在调试时,我验证了变量f
不为空,并且remove()
确实调用了代码。
当我DialogFragment
使用新的 VO 数据再次实例化时,Google 地图会显示新数据和旧数据。它只是不重置de记忆......
有任何想法吗?
编辑1:
我发现了问题所在。根本没有在 Activity 的onEndDialogClosed()
方法中删除我的 VO。愚蠢的我。
感谢所有人,并希望此代码对其他人有所帮助。