Android DialogFragment将数据保留在内存中,即使在调用dismise()之后也是如此
我在这里的行为很奇怪。从我的Android DialogFragment将数据保留在内存中,即使在调用dismise()之后也是如此,android,android-fragments,android-dialogfragment,Android,Android Fragments,Android Dialogfragment,我在这里的行为很奇怪。从我的main活动类中,我调用我的对话框片段: EndRoundDialogFragment df = new EndRoundDialogFragment(myVO); df.show(fragmentManager, "end_round_dialog_fragment"); 此DialogFragment的构造函数很简单: public EndRoundDialogFragment(UserVO vo) { this.userVO = vo; } 这个片段
main活动
类中,我调用我的对话框片段
:
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设置为null
如您所见,我的活动
实现了对话框的侦听器onendialogclosed()
。此方法的实现是:
@Override
public void onEndDialogClosed() {
Fragment prev = fragmentManager.findFragmentByTag("end_round_dialog_fragment");
if(prev != null)
fragmentManager.beginTransaction().remove(prev).commit();
new Get5PointsTask().execute();
}
所以当它关闭时,我也移除了整个片段
我还为此对话框片段添加了以下内容,以确保确实从代码中删除了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
不是null,并且remove()
代码确实被调用
当我再次实例化带有新VO数据的对话框片段时,Google Maps显示的是新数据和旧数据。只是没有重置去内存
有什么想法吗
编辑1:
我发现了问题所在。只是没有在活动的oneddialogclosed()
方法中擦除我的VO。愚蠢的我
谢谢大家,希望这段代码能帮助其他人。所以,我解决了这个问题。
我只是没有重新实例化在活动中保存用户数据的VO。。。因此,当打开对话框fragment
时,它会保存新的和旧的。这么简单,这么愚蠢
谢谢 请写一个答案,而不是编辑,这样人们就可以将其视为已解决的问题并相应地使用它;那是我的安排。