0

我有一個片段以至我有一個列表視圖。當我按下列表視圖位置時,我打開片段對話框,在其中發送點擊項目的位置。在那裏,我可以從列表視圖中改變一些數據。但是,當我改變我的方向(片段和對話框片段獲得不同的佈局)時,實時更改不再工作。如果我去了另一個片段,而不是返回,那麼這個變化已經完成但沒有生效。在屏幕方向更改後從對話框中更新ListView

都將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不再做它的工作,但我不知道爲什麼。

編輯:

在對話框我有這2個部分,在對話框佈局再現本身旋轉normaly:

setRetainInstance(true); and 
@Override 
public void onDestroyView() { 
    if (getDialog() != null && getRetainInstance()) 
     getDialog().setDismissMessage(null); 
    super.onDestroyView(); 
} 

而在mainFragment我有setRetainInstance(真);當我旋轉屏幕時它也會重新創建。如果我從主片段中刪除setRetainInstance,那麼發生2件事: 1.當我打開另一個片段並旋轉兩個片段的佈局看起來重疊istelf:S 2.當我從列表視圖中打開片段對話框並旋轉對話框失去我點擊的listview位置

+0

需要說明的是,您將'setRetainInstance'設置爲true,但是您在旋轉時手動重新創建佈局? – Qw4z1 2014-10-22 14:47:58

+0

我編輯了我的問題。請檢查。 – 2014-10-23 07:52:54

+0

檢查此問題http://stackoverflow.com/questions/11307390/dialogfragment-disappears-on-rotation-despite-setretaininstancetrue並嘗試只在對話框中刪除setRetainInstance – Qw4z1 2014-10-24 07:57:41

回答

0

你需要刪除你的碎片中的setRetainInstance(true)!當您旋轉設備時,您的應用將重新創建活動。但是,在你的片段中,存儲着舊活動的鏈接(它們在旋轉後已經被破壞),這就是爲什麼你不能對它們做任何事情的原因。

如果要在方向更改時保存數據 - 將此數據保存在onSaveInstanceState中的數據包中並獲取它們,例如onRestoreInstanceState。

+0

如果我這樣做,那麼沒有用。如果我從主碎片中刪除了setRetainInstance,那麼當我打開另一個碎片並旋轉屏幕布局時,可以在另一個碎片上打開另一個碎片:/和eaven當我在旋轉後打開對話框時,我現在失去了正確的listview位置,因爲它在主碎片中發生了變化。 – 2014-10-23 07:00:38

相關問題