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

时间:2014-10-22 09:02:04

标签: android listview screen-orientation android-dialogfragment notifydatasetchanged

我有一个片段,我有一个列表视图。当我按下列表视图位置时,我打开片段对话框,我在其中发送被点击项目的位置。然后,我可以从列表视图中实时更改一些数据。但是当我改变方向时(片段和对话框片段都有不同的布局),实时更改不再起作用。如果我转到另一个片段而不是后面,则会进行更改,但不会生效。

都将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.当我从列表视图中打开片段对话框并旋转对话框时,忽略了我点击的列表视图位置

1 个答案:

答案 0 :(得分:0)

您需要删除片段中的setRetainInstance(true)!当您旋转设备时,您的应用将重新创建活动。但是在你的片段中有存储旧活动的链接(在旋转后已经被销毁),这就是为什么你不能用它们做任何事情。

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