Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/200.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 屏幕方向更改后从对话框更新ListView_Android_Listview_Screen Orientation_Android Dialogfragment_Notifydatasetchanged - Fatal编程技术网

Android 屏幕方向更改后从对话框更新ListView

Android 屏幕方向更改后从对话框更新ListView,android,listview,screen-orientation,android-dialogfragment,notifydatasetchanged,Android,Listview,Screen Orientation,Android Dialogfragment,Notifydatasetchanged,我有一个片段,其中有一个列表视图。当我按下listview位置时,我会打开片段对话框,在其中我会发送单击项目的位置。在那里,我可以从listview实时更改一些数据。但是当我改变方向时,片段和对话片段都得到了不同的布局,实时的改变不再起作用。如果我转到另一个片段,然后返回,则更改已完成,但未生效 两者都将RetainInstance设置为true 在片段中设置适配器: documentPosListViewAdapter = new DocumentPosListViewAdapter(roo

我有一个片段,其中有一个列表视图。当我按下listview位置时,我会打开片段对话框,在其中我会发送单击项目的位置。在那里,我可以从listview实时更改一些数据。但是当我改变方向时,片段和对话片段都得到了不同的布局,实时的改变不再起作用。如果我转到另一个片段,然后返回,则更改已完成,但未生效

两者都将RetainInstance设置为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();
}
在主片段中,我设置了retaininstancetrue;当我旋转屏幕时,它也会重现。如果我从主片段中删除setRetainInstance,则会发生两件事: 1.当我打开另一个片段并旋转时,两个片段的布局似乎重叠了istelf:S 2.当我从listview打开片段对话框并旋转该对话框时,会松开我单击的listview位置

您需要删除片段中的setRetainInstancetrue!旋转设备时,应用程序将重新创建活动。但在你的片段中,有一些链接指向你存储的旧活动,这些链接在旋转后已经被破坏了,这就是为什么你不能对它们做任何事情


如果要在方向更改时保存数据,请将此数据保存在onSaveInstanceState中的捆绑包中,并获取它们,例如onRestoreInstanceState。

为了清楚起见,您将“setRetainInstance”设置为true,但您在旋转时手动重新创建布局?我已编辑了我的问题。请检查。检查此问题并尝试仅删除对话框中的setRetainInstance Rotation仍然有效,但我将实例丢失到listview位置。我可以将它保存在onSaveInstanceState中,但这只会导致我现在遇到的相同问题。listview没有实时刷新。只要我把碎片装进去,里面又装了一次。。。是否每次活动开始时都创建一个片段?如果是这样的话,它实际上可能会创建一个新的片段,而旧的片段则生活在背景中。如果我这样做,那么什么都不起作用。如果我从主片段中删除setRetainInstance,那么当我打开另一个片段并旋转屏幕布局时,一个一个转到另一个:/eaven当我在旋转后打开对话框时,我现在失去了正确的listview位置,因为它在主片段中发生了更改。