当前位置: 首页 > 知识库问答 >
问题:

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

微生令
2023-03-14

我有一个片段,我有一个listview。当我按下listview position时,我打开片断对话框,在其中我发送所单击项目的位置。在那里,我可以从ListView实时更改一些数据。但是当我改变我的方向(片段和对话框片段都有不同的布局)时,live更改不再起作用。如果我去另一个片段,比回来,改变是做了,但不是活着。

两者都将SetRetaInstance设置为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();
}

在main片段中,我有setRetaInstance(true);同样,当我旋转屏幕时,它会重新创建。如果我从main片段中移除setRetuctionInstance,那么会发生两件事:1。当我打开另一个片断并旋转时,这两个片断的布局似乎与istelf:S2重叠。当我从listview中打开片断对话框并旋转时,该对话框将失去我单击的listview位置

共有1个答案

韩祯
2023-03-14

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

如果您想在方向改变时保存数据--将此数据保存在onSaveInstanceState中的bundle中并获取它们,例如OnRestoreInstanceState。

 类似资料:
  • 我正在向运行的activity添加一个带有WindowManager的相机覆盖。当我启动相机并调用WindowManager时,它将我的屏幕从纵向变为横向,即使我为WindowManager.LayoutParams分配了适当的纵向标记。还没能通过谷歌找到任何解决方案。 下面是我在服务中的方法中运行的WindowManager代码: 布局r.layout.camera只是我将相机添加到的Frame

  • 在更改屏幕之前,我试图向用户显示带有对话框的成功消息。我希望它等待用户单击ok按钮或按Enter键,然后更改屏幕。由于我必须在程序中放置大量对话框,为了避免重复,我尝试在MainClass中使用一个createDialog方法来创建对话框,并将其添加到我传递给该方法的阶段。但问题是,我希望它将屏幕更改为用户按下ok按钮后传递给它的屏幕,但dialog的结果函数是一个内部方法,它不访问我传递给函数的

  • 问题内容: 我正在尝试制作一个可以帮助我评估从Web资源下载文件的时间的应用程序。我发现了2个样本: 使用Android下载文件,并在ProgressDialog中显示进度 和 http://www.helloandroid.com/tutorials/how-download-fileimage-url- 您的设备 第二个示例显示了较小的下载时间,但是我不明白如何使用它来更新进度对话框。我认为在

  • 我有一个以编程方式创建片段的活动。该片段内部有另一个片段。 活动包含片段A。片段A包含片段B。 如果(savedInstanceState==null){ } 但对我不起作用! null null 活动: 片段:

  • 我有两个选项卡的活动,它实现了两个相似的片段,每个片段都由GridView组成,通过AsyncTask加载项目,它工作正常,直到屏幕方向改变。。。在这之后,只能单击操作栏并在选项卡之间切换,但GridView完全停止与用户交互:滚动、单击或其他任何操作。只实现了标准的onSaveInstanceState(Bundle outState)和onRestoreInstanceState(Bundle