2014-04-30 21 views
0

我有應用程序與列表視圖(一行包含textview,imageview,ratingbar)和我自己的適配器。當我在排序listview(我在菜單中選擇此選項)後旋轉屏幕時,它會在排序前返回到窗體。 我試過的onSaveInstanceState覆蓋:旋轉後存儲數據自己的適配器

@Override 
public void onSaveInstanceState(Bundle outState) 
{ 
    super.onSaveInstanceState(outState); 
    outState.putParcelable("listView", listView.onSaveInstanceState()); 
} 

和片段的onCreate:

  listView.setAdapter(adapter); 

    if(savedInstanceState!=null) 
    { 
     mListInstanceState=savedInstanceState.getParcelable("listView"); 
     listView.onRestoreInstanceState(mListInstanceState); 
    } 

但它不工作。我是否也應該重寫onRestoreInstanceState或者使用別的東西?

+0

您是否保存了適配器?當你旋轉屏幕時,所有的東西都會重新啓動,你的代碼會再次通過它的初始化。 –

+0

我明白了,我想這樣做,然後在oncreate f.e開始時閱讀。但我不知道應該使用什麼,共享首選項(它似乎很費勁)還是其他的東西?我是一個初學者:) – user3590445

回答

1

問題是當方向更改您的Activity被重新創建,並且當調用onCreate()時,您正在使用默認列表項目設置適配器。

如果你不保持橫向/縱向不同layout,你可以簡單地僅僅通過增加在清單configChangesActivity

 android:configChanges="orientation|screenSize" // add this line 

這將避免重新創建Activity和相同的佈局將避免Activity重新創建用於適應屏幕寬度。確保您的listView佈局寬度設置爲match_parent

如果你仍然想你Activity重建,那麼你需要記住最後選定的過濾器時onSaveInstanceState上稱爲方向改變

@Override 
public void onSaveInstanceState(Bundle outState)= { 
    outState.putString(「selectedFilter","some name"); 
    super.onSaveInstanceState(outState); 
} 

然後當onCreate在後旋轉叫,你可以得到selectedFilter名稱

String filterName = null; 

    if(savedInstanceState != null){ 
     filterName = savedInstanceState.getString("lastFilter"); 
    } 

最後,根據過濾器名稱設置項目listView

if(filterName != null && filterName.equalsIgnoreCase("some name")){ 
     // filtered list items 
} else { 
     // default list items 
    } 
+0

謝謝,它的工作原理:)我不得不改變filterName的初始化,導致它在旋轉屏幕再次被寵壞。 – user3590445

相關問題