我在这里有一种非常奇怪的行为。在我的MainActivity
课程中,我调用了DialogFragment
:
EndRoundDialogFragment df = new EndRoundDialogFragment(myVO);
df.show(fragmentManager, "end_round_dialog_fragment");
此DialogFragment的构造函数很简单:
public EndRoundDialogFragment(UserVO vo) {
this.userVO = vo;
}
此片段中包含Google地图片段。所以我基本上做的是:
@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设置为null。
如您所见,我的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()
代码。
当我再次使用新的VO数据实例化DialogFragment
时,Google地图会显示新旧数据。它只是没有重置de memory ......
有什么想法吗?
编辑1:
我发现了问题所在。根本没有在活动的onEndDialogClosed()
方法中删除我的VO。愚蠢的我。
感谢所有人,并希望此代码可以帮助其他人。
答案 0 :(得分:0)
所以,我解决了这个问题。
我只是没有重新实例化在Activity
中保存用户数据的VO ...所以当打开DialogFragment
时,它保留了新的和旧的。很简单,像那样愚蠢。
谢谢!