2013-06-19 29 views
0

我有一個應用程序與幾個SherlockFragmentActivities和SherlockFragment。我在支持輪換和活動之間的轉換時遇到了麻煩。SherlockFragment的,旋轉和onConfigurationChanged

在我的第一SherlockFragmentActivity,我試圖抓住旋轉與此代碼:

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    if (savedInstanceState == null) { 
     InitializeUI(); 
     details = new MeetingConnectFragment(); 
     getSupportFragmentManager().beginTransaction().add(
       R.id.activity_scheduled_meeting_connect, details).commit();  
    } 
} 
//this is called when the screen rotates. 
// (onCreate is no longer called when screen rotates due to manifest, see: android:configChanges) 
@Override 
public void onConfigurationChanged(Configuration newConfig) 
{ 
    super.onConfigurationChanged(newConfig); 

    InitializeUI(); 
    details = new MeetingConnectFragment(); 
    details.setInfo(cInfo); 
    FragmentTransaction trans = getSupportFragmentManager().beginTransaction(); 
    trans.replace(R.id.activity_scheduled_meeting_details, details); 
    trans.addToBackStack(null); 
      trans.commit();  
} 

private void InitializeUI() { 
    setContentView(R.layout.activity_meeting_connect); 
    // other stuff cut for brevity 
} 

內MeetinConnectFragment有一個按鈕,將彈出一個不同的活動。如果用戶旋轉屏幕,而在第二個活動,然後返回到本次活動中,程序崩潰與例外:

E/AndroidRuntime(17976): java.lang.IllegalStateException: Can not perform this action after onSaveInstanceState 
E/AndroidRuntime(17976): at android.support.v4.app.FragmentManagerImpl.checkStateLoss(FragmentManager.java:1299) 
E/AndroidRuntime(17976): at android.support.v4.app.FragmentManagerImpl.enqueueAction(FragmentManager.java:1310) 
E/AndroidRuntime(17976): at android.support.v4.app.BackStackRecord.commitInternal(BackStackRecord.java:541) 
E/AndroidRuntime(17976): at android.support.v4.app.BackStackRecord.commit(BackStackRecord.java:525) 
E/AndroidRuntime(17976): at com.level3.connect.meetings.MeetingConnectActivity.onConfigurationChanged(MeetingConnectActivity.java:49) 
E/AndroidRuntime(17976): at android.app.ActivityThread.performConfigurationChanged(ActivityThread.java:3675) 
E/AndroidRuntime(17976): at android.app.ActivityThread.handleActivityConfigurationChanged(ActivityThread.java:3849) 
E/AndroidRuntime(17976): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1370) 
E/AndroidRuntime(17976): at android.os.Handler.dispatchMessage(Handler.java:99) 
E/AndroidRuntime(17976): at android.os.Looper.loop(Looper.java:137) 
E/AndroidRuntime(17976): at android.app.ActivityThread.main(ActivityThread.java:4921) 
E/AndroidRuntime(17976): at java.lang.reflect.Method.invokeNative(Native Method) 
E/AndroidRuntime(17976): at java.lang.reflect.Method.invoke(Method.java:511) 
E/AndroidRuntime(17976): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1027) 
E/AndroidRuntime(17976): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:794) 
E/AndroidRuntime(17976): at dalvik.system.NativeStart.main(Native Method) 

唯一的例外是在提交變化的線。我一直在試圖弄清楚如何處理這種情況,但我不太清楚。幫助讚賞。

+0

該日誌不完全包含完整的異常。你可以發佈其餘的? –

+0

@ Tanis.7x我已經更新了該帖子,其餘部分都是異常.Tx –

回答

0

我最終刪除了配置/旋轉的所有處理,並讓Android處理它爲了做到這一點,我必須刪除代碼來檢查Activity中的onCreate中savedInstanceState是否爲null。每次創建活動時,都會重新創建片段。

我將不得不運行一些測試,看看是否會導致內存泄漏 - 也許我需要首先銷燬舊的碎片。

0

嘗試將您的電話移動到InitializeUI()以下。

當活動設置新的內容視圖時,它將調用onSaveInstanceState(),因此您將收到您所看到的IllegalStateException。