2012-05-18 35 views
0

在我的Activity中我有兩個Gallery項目ExpandableListViewExpandableListView的子項我有GridView。程序運行完美。我需要的是處理方位變化。我知道,當方向改變時,活動將調用onDestroy,之後onCreate。因爲我的ExpandableListView會崩潰,即使用戶在他完成方向更改之前已經展開。當Android中發生旋轉變化時,ExpandableListView崩潰

我發現了一個很棒的概念來處理在StackOverflow中的旋轉變化。這是link。我試圖以這種方式實施,但我失敗了。

我需要的是在取向改變發生之前採取用戶在方向改變之前使用過的相同界面。請指導我。

更新與艙單內容

<application 
    android:icon="@drawable/ic_launcher" 
    android:label="@string/app_name" > 

    <activity 
     android:name=".activities.HomeActivity" 
     android:configChanges="keyboardHidden|orientation|screenLayout" >  

     <intent-filter> 
      <action android:name="android.intent.action.MAIN" ></action> 
      <category android:name="android.intent.category.LAUNCHER" ></category> 
     </intent-filter>    
    </activity> 

    <activity 
     android:name=".activities.WebViewActivity" 
     android:configChanges="keyboardHidden|orientation|screenLayout" >   
    </activity> 

</application> 

回答

1

處理旋轉可能是微不足道的,取決於你有什麼屏幕旋轉時的反應。如果您沒有什麼特別要做的事,您可以隨時告訴Android自己管理輪換,並避免重新啓動您的activity。這可以通過在AndroidManifest.xmlandroid:configChanges="orientation"中聲明來實現。如果你這樣做,Android會撥打onConfigurationChanged,你可以隨時override。如果您希望在屏幕旋轉時重新開始活動,則必須保存當前狀態。也就是說,就你而言,它可能是當前的groupschildren目前崩潰並重新崩潰。您可以使用onSavedInstanceState()/onRestoreInstanceState()來保存和恢復所需的狀態。

編輯:如果你的目標API等級13,你必須與orientation選項添加screenSize選項將android:configChanges結合如在規定的documentation

屏幕方向發生了變化 - 用戶已經旋轉了該裝置。

注意:如果您的應用程序面向API級別13或更高(如通過中的minSdkVersion和targetSdkVersion屬性聲明 ),那麼你應該 還申報「屏幕尺寸」的配置,因爲它也改變 當肖像之間的設備切換和風景取向。

+0

在我的AndroidManifest中,我聲明瞭'android:configChanges =「keyboardHidden | orientation | screenLayout',但它不會幫助我解決問題,是的,我已經閱讀了文檔並知道必須將前一個實例保存爲對象並在onCreate()再次加載時返回,但在我的情況下,我可以聲明爲Object,因爲我填充了兩個Gallery項目,一個ExpandableListView和兩個GridViews如果我創建一個Object來保存我的最後一個實例我應該保存什麼? – AnujAroshA

+0

我不明白。你可以重述一下嗎?你是否告訴我添加android:configChanges =「keyboardHidden | orientation | screenLayout」會重新創建你的活動?它會從onCreate重新啓動嗎? – Blackbelt

+0

是的,它再次從onCreate()方法中調用。我可以看到它註銷。在你的評論之後,我已經覆蓋了'onConfigurationChanged'方法並調用Log.d()方法。它甚至不在Log中打印。 – AnujAroshA

0

爲什麼不把這些東西保存在一個包中。

您將狀態置於onDestroy函數中的bundle中,然後您在onCreate函數中讀取該包。

onDestroy() 
{ 
Bundle extras = intent.getExtras(); 
extras.putInt("group", 5); 
extras.putInt("item", 23); 
} 

onCreate() 
{ 
Bundle extras = getIntent().getExtras(); 
int item= extras.getInt("item"); 
int group= extras.getInt("group"); 
} 

如果擴展了ExpandableListView,則可以保存該包。

+0

首先,你的代碼中有一個簡單的語法錯誤,那裏的StackOverflow人不允許我編輯那個小錯誤:-)關於你的回答,你有什麼建議我把在捆綁?獲取數據不是問題。我想加載用戶之前在方向發生之前停留的相同位置。舉個例子;在方向更改之前,用戶可以停留在Gallery的第23項,並在ExpandableListView中打開第5組。我想加載相同的界面。謝謝 – AnujAroshA

+0

@AnujaPiyadigama編輯也許這是你需要的,否則我不會知道。 – mariomario

相關問題