-1

我在这里有一个非常奇怪的行为。在我的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。愚蠢的我。

感谢所有人,并希望此代码对其他人有所帮助。

4

1 回答 1

0

所以,我解决了这个问题。我根本没有重新实例化将用户数据保存在Activity...中的VO,因此在打开时DialogFragment,它保存了新的和旧的。那样简单,那样愚蠢。

谢谢!

于 2013-06-09T16:52:03.120 回答