我有一个片段,我有一个列表视图。当我按下列表视图位置时,我打开片段对话框,我在其中发送被点击项目的位置。然后,我可以从列表视图中实时更改一些数据。但是当我改变方向时(片段和对话框片段都有不同的布局),实时更改不再起作用。如果我转到另一个片段而不是后面,则会进行更改,但不会生效。
都将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(); doesent再做它的工作,但我不确定为什么。
编辑:
在对话框中我有这两个部分,对话框布局在旋转正常时重新创建:
setRetainInstance(true); and
@Override
public void onDestroyView() {
if (getDialog() != null && getRetainInstance())
getDialog().setDismissMessage(null);
super.onDestroyView();
}
在mainFragment中我有setRetainInstance(true);以及它在我旋转屏幕时重新创建。如果我从主片段中删除setRetainInstance,则会发生以下两件事: 1.当我打开另一个片段并旋转两个片段的布局似乎重叠istelf:S 2.当我从列表视图中打开片段对话框并旋转对话框时,忽略了我点击的列表视图位置
答案 0 :(得分:0)
您需要删除片段中的setRetainInstance(true)
!当您旋转设备时,您的应用将重新创建活动。但是在你的片段中有存储旧活动的链接(在旋转后已经被销毁),这就是为什么你不能用它们做任何事情。
如果要在更改方向时保存数据 - 将此数据保存在onSaveInstanceState中的bundle中并获取它们,例如onRestoreInstanceState。