【问题标题】:ListView update from dialog after screen orientation change屏幕方向更改后从对话框更新 ListView
【发布时间】: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


【解决方案1】:

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

如果您想在方向改变时保存数据 - 将此数据以捆绑包的形式保存在 onSaveInstanceState 中并获取它们,例如 onRestoreInstanceState。

【讨论】:

  • 如果我这样做了,那就什么都没有了。如果我从我的主片段中删除 setRetainInstance ,那么当我打开另一个片段并旋转屏幕布局时,会在另一个片段上旋转:/ 并且即使在旋转后打开对话框时,我现在也会丢失正确的列表视图位置,因为它在主片段中发生了变化。跨度>
猜你喜欢
  • 1970-01-01
  • 2011-03-02
  • 1970-01-01
  • 1970-01-01
  • 2013-09-16
  • 2017-01-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多