我有一个Activity
,我有一个MenuItem
,点击后会初始化以下DialogFragment
:
MapDialogFragment df = new MapDialogFragment();
Bundle bundle = new Bundle();
bundle.putDoubleArray("lat_log", new double[] {48.85139, 2.34798});
df.setArguments(bundle);
df.show(fragmentManager, "google_maps_dialog_fragment");
此DialogFragment中包含一个GoogleMaps <fragment
android:id="@+id/map"
android:name="com.google.android.gms.maps.MapFragment"
。
GoogleMap
对象有OnMapClickListener
,当用户点击它时,会向其添加标记。一切都很棒。
然后,用户点击关闭按钮,我运行以下代码:
getArguments().remove("lat_log");
dismissAllowingStateLoss();
然后关闭Dialog
并使用用户输入的数据刷新我的Activity
代码(通过Listener
)。
当用户再次点击MenuItem
并打开Dialog
时,之前用户插入的每个数据仍然存在。
Dialog的代码已在onCreateView()
方法中初始化。我没有实现onResume()
,如果它有助于了解...
我做错了什么?
非常感谢, 菲利普
编辑1:
I have tried the following before showing the DialogFragment:
Fragment prev = fragmentManager.findFragmentByTag("google_maps_dialog_fragment");
if(prev != null) {
fragmentManager.beginTransaction().remove(prev).commit();
}
MapDialogFragment df = new MapDialogFragment();
Bundle bundle = new Bundle();
bundle.putDoubleArray("lat_log", new double[] {48.85139, 2.34798});
df.setArguments(bundle);
df.show(fragmentManager, "google_maps_dialog_fragment");
没有效果......
有想法的人吗?
编辑2: 找到问题的根源:
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
if (view != null) {
ViewGroup parent = (ViewGroup) view.getParent();
if (parent != null)
parent.removeView(view);
}
try {
view = inflater.inflate(R.layout.dialog, container, false);
} catch (InflateException e) {
/* map is already there, just return view as it is */
System.out.println("this is not working");
}
....
我添加了if (view != null)
因为出于某些疯狂的原因,当我第二次实例化DialogFragment时,inflate方法返回null ...我不知道为什么。所以我保持对view
作为类变量的引用......
所以现在我必须找出为什么膨胀现在正在回归......
编辑4
@Override
public void onDestroyView() {
super.onDestroyView();
MapFragment f = (MapFragment) getFragmentManager().findFragmentById(R.id.map);
if (f != null)
getFragmentManager().beginTransaction().remove(f).commit();
}
你去吧。这有效!