2012-06-06 92 views
0

在我的應用程序中有一個列表視圖,每次向下滾動到底部時動態增加10個項目。所以在使用縱向方向時,我向下滾動到100個項目,然後當我將方向更改爲橫向時,我的列表視圖再次被創建(僅顯示前10項)。這裏的問題是,當我回到肖像應用程序崩潰說:更改設備方向listview獲取重新創建

06-06 12:06:54.849: E/AndroidRuntime(4684): java.lang.RuntimeException: 
Unable to start activity 
ComponentInfo{com.Android.MyApp/com.Android.MyApp.ListViewActivity}: 
java.lang.IndexOutOfBoundsException: Invalid index 0, size is 0 

如何使列表視圖,甚至恢復上改變方向???

+0

若要停止娛樂,請在活動標記中添加清單文件「android:configChanges =」orientation | keyboardHidden「。 –

回答

-2

發生這種情況是因爲您的活動正在重新創建定位更改。
爲了避免它,在你AndroidManifest.xml添加此活動的標記下:

android:configChanges="orientation" 

,包括這種方法在你的活動:

@Override 
public void onConfigurationChanged(Configuration newConfig) { 
    super.onConfigurationChanged(newConfig); 
    } 

希望它可以幫助!

+1

如果你不打算改變任何東西(如果你只是從橫向切換到縱向,並且有一個wrap_content ListView,通常不需要實現onConfigurationChanged) – Tim

+0

是的......但是如果你需要修改任何控制位置的大小/位置基於方向的變化,所以這種方法將是必要的。所以在實施時沒有任何傷害。 – GAMA

+0

和onConfigurationChanged中的newConfig必須是方向?或者只是newConfig? – Housefly

-1

答案很簡單:你必須改變你的活動的AndroidManifest入境,並添加

android:configChanges="orientation" 

這一次將確保如果方向發生變化的活動沒有得到重建。

確保覆蓋onConfigurationChanged方法來對變化做出反應(如果你想做出反應;))

+0

和onConfigurationChanged中必須實現的內容....說不要重新啓動活動? – Housefly

+0

已經有一個超級實現存在 - 你不需要重寫它,如果你只是調用超級;) – Tim

+2

爲我節省了很多時間:-) +1 – Thkru

0

你有兩個選擇。

選項1

包括android:configChanges="orientation" 2防止活動重新啓動 但是,這會阻止您設置不同的用戶界面爲不同的方向。

選項2

如果你想爲不同方向設置不同的UI然後,你將不得不寫更多 位代碼。

閱讀onSaveInstanceState和onRestoreInstanceState保存和檢索值,而 重新啓動活動。