2015-10-18 34 views
0

我正嘗試創建一個應用程序,以便更改屏幕方向。在屏幕方向更改時,我希望保存我的數據。我創建了具有相同名稱但方向不同的佈局。肖像佈局是一個RelativeLayout。景觀之一具有包含RelativeLayout的ScrollView佈局,否則內容完全相同。
由於我使用API​​13和+,我用這條線在我的清單:Android ScrollView佈局不適用於方向更改

android:configChanges="keyboardHidden|orientation|screenSize" 

當我改變方向,我的數據仍然存在,但在滾動型不工作,所以我不能訪問我的佈局底部。

如果沒有manifest.xml文件中的上一行,ScrollView可以很好地工作(但數據不會保存)。我試圖將我的RelativeLayout更改爲LinearLayout,因爲它是SrollView中最常用的佈局,但它不起作用。

你有解決這個問題的想法嗎?
謝謝你提前

+0

請檢查我的答案[這裏](http://stackoverflow.com/questions/30564737/android-orientation-change-different-layout-same-fragments)可以幫助你 – pRaNaY

+0

我不確定它是最好的解。的確,我的應用程序非常簡單,由1項活動組成。我的理解(也許我錯了)是片段用於複雜的應用程序。我認爲在這裏使用片段就像每天買一輛法拉利跑到1英里一樣。這再次只是我的印象。你認爲有更適合的解決方案嗎?如果可能的話,我想了解它爲什麼不起作用。 – Mtoypc

+0

你正在爲_normal layout_和_land layout_(landscape)嘗試兩個diff佈局文件嗎? – pRaNaY

回答

0

我找到了解決方案。我認爲這不是最好的解決方案,我仍然不明白爲什麼我的問題中的代碼無法正常工作。所以如果你知道發表評論或答案。

我的解決辦法是:
1)我刪除線在清單
2)我實現了這兩種方法:

@Override 
    protected void onSaveInstanceState(Bundle outState) { 
     //data to be saved 
     super.onSaveInstanceState(outState); 
    } 


@Override 
    protected void onRestoreInstanceState(Bundle savedInstanceState) { 
     super.onRestoreInstanceState(savedInstanceState); 
     //retore data 
    } 

此解決方案,因爲我還沒有大量數據的保存和恢復。這是避免以前的問題,而不是解決問題的一種方法。

此外,如果您有一個ImageView應該在開始時處於禁用狀態,並在其他活動生命期的事件後啓用,則此方法可能成爲問題。如果在onCreate()的開頭使用setEnabled(false)方法,如果更改屏幕方向,即使之前發生更改按鈕狀態的事件,setEnabled(false)方法也會再次發生。所以你希望你的按鈕被啓用,但是在屏幕變化之後它將被禁用。 (即使使用此解決方案也很容易避免此問題,但它不是乾淨的代碼)。