【发布时间】:2014-10-22 09:02:04
【问题描述】:
我有一个片段,我有一个列表视图。当我按下列表视图位置时,我打开片段对话框,在其中发送单击项目的位置。然后我可以从列表视图中实时更改一些数据。但是当我改变我的方向(片段和对话框片段都有不同的布局)时,实时更改不再起作用。如果我转到另一个片段而不是返回,则进行了更改但不是实时的。
两者都将 setRetainInstance 设置为 true。
在片段中设置适配器:
documentPosListViewAdapter = new DocumentPosListViewAdapter(rootView.getContext());
listViewDocumentPos.setAdapter(documentPosListViewAdapter);
对话监听器:
@Override
public void onDataUpdated() {
currentWorkDocumentPos.calcPos();
session.getWorkDocumentPosDao().update(currentWorkDocumentPos);
currentWorkDocument.headCalc();
session.getWorkDocumentDao().update(currentWorkDocument);
refreshWorkDocumentLabels();
documentPosListViewAdapter.notifyDataSetChanged();
}
以及我在对话框中所做的事情:
currentWorkDocumentPos.setQuantity(quantity + 1);
String n_q = Double.toString(currentWorkDocumentPos.getQuantity());
editTextQuantity.setText(n_q);
editTextQuantity.setSelection(n_q.length());
myListener.onDataUpdated();
在我更改屏幕方向之前一切正常。然后现场更改不再发生。我猜是 documentPosListViewAdapter.notifyDataSetChanged();不再做它的工作,但我不知道为什么。
编辑:
在对话框中我有这两个部分,并且对话框布局会在正常旋转时重新创建自己:
setRetainInstance(true); and
@Override
public void onDestroyView() {
if (getDialog() != null && getRetainInstance())
getDialog().setDismissMessage(null);
super.onDestroyView();
}
在 mainFragment 我有 setRetainInstance(true);同样,当我旋转屏幕时它会重新创建。如果我从主片段中删除 setRetainInstance ,则会发生两件事: 1.当我打开另一个片段并旋转两个片段的布局时似乎重叠 istelf :S 2.当我从列表视图打开片段对话框并旋转对话框时,我点击的列表视图位置会丢失
【问题讨论】:
-
为了清楚起见,您将“setRetainInstance”设置为 true,但您在旋转时手动重新创建布局?
-
我已经编辑了我的问题。请检查。
-
检查这个问题stackoverflow.com/questions/11307390/… 并尝试只删除对话框中的setRetainInstance
-
旋转仍然有效,但我将实例丢失到列表视图位置。我可以将它保存在 onSaveInstanceState 中,但这只会导致我现在遇到的同样问题。列表视图不会实时刷新。只有当我再次加载包含它的片段时。
-
Uhm... 每次Activity启动时你都会创建一个片段吗?如果是这样,它实际上可能会创建一个新片段,而旧片段位于后台。
标签: android listview screen-orientation android-dialogfragment notifydatasetchanged