Android 屏幕方向更改后从对话框更新ListView
我有一个片段,其中有一个列表视图。当我按下listview位置时,我会打开片段对话框,在其中我会发送单击项目的位置。在那里,我可以从listview实时更改一些数据。但是当我改变方向时,片段和对话片段都得到了不同的布局,实时的改变不再起作用。如果我转到另一个片段,然后返回,则更改已完成,但未生效 两者都将RetainInstance设置为true 在片段中设置适配器:Android 屏幕方向更改后从对话框更新ListView,android,listview,screen-orientation,android-dialogfragment,notifydatasetchanged,Android,Listview,Screen Orientation,Android Dialogfragment,Notifydatasetchanged,我有一个片段,其中有一个列表视图。当我按下listview位置时,我会打开片段对话框,在其中我会发送单击项目的位置。在那里,我可以从listview实时更改一些数据。但是当我改变方向时,片段和对话片段都得到了不同的布局,实时的改变不再起作用。如果我转到另一个片段,然后返回,则更改已完成,但未生效 两者都将RetainInstance设置为true 在片段中设置适配器: documentPosListViewAdapter = new DocumentPosListViewAdapter(roo
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();
}
在主片段中,我设置了retaininstancetrue;当我旋转屏幕时,它也会重现。如果我从主片段中删除setRetainInstance,则会发生两件事:
1.当我打开另一个片段并旋转时,两个片段的布局似乎重叠了istelf:S
2.当我从listview打开片段对话框并旋转该对话框时,会松开我单击的listview位置您需要删除片段中的setRetainInstancetrue!旋转设备时,应用程序将重新创建活动。但在你的片段中,有一些链接指向你存储的旧活动,这些链接在旋转后已经被破坏了,这就是为什么你不能对它们做任何事情
如果要在方向更改时保存数据,请将此数据保存在onSaveInstanceState中的捆绑包中,并获取它们,例如onRestoreInstanceState。为了清楚起见,您将“setRetainInstance”设置为true,但您在旋转时手动重新创建布局?我已编辑了我的问题。请检查。检查此问题并尝试仅删除对话框中的setRetainInstance Rotation仍然有效,但我将实例丢失到listview位置。我可以将它保存在onSaveInstanceState中,但这只会导致我现在遇到的相同问题。listview没有实时刷新。只要我把碎片装进去,里面又装了一次。。。是否每次活动开始时都创建一个片段?如果是这样的话,它实际上可能会创建一个新的片段,而旧的片段则生活在背景中。如果我这样做,那么什么都不起作用。如果我从主片段中删除setRetainInstance,那么当我打开另一个片段并旋转屏幕布局时,一个一个转到另一个:/eaven当我在旋转后打开对话框时,我现在失去了正确的listview位置,因为它在主片段中发生了更改。