2013-08-19 65 views
4

這是我寫的代碼無法找到此功能崩潰但有時會起作用的代碼。IllegalStateException:在FragmentActivity類中的onSaveInstanceState後無法執行此操作

public class ListFragmentActivity extends FragmentActivity { 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    main(); 
    IntentFilter filter1 = new IntentFilter("com.venkat.listfragment"); 
    registerReceiver(myReceiver, filter1); 
    // register reciever intent filter. 

} 
public void main(){ 
    IntentFilter filter1 = new IntentFilter("com.venkat.listfragment"); 
    registerReceiver(myReceiver, filter1); 
    List_Fragment ls_fragment = new List_Fragment(); 
    getSupportFragmentManager().popBackStack(null, FragmentManager.POP_BACK_STACK_INCLUSIVE); 
    getSupportFragmentManager().beginTransaction() 
    .replace(android.R.id.content, ls_fragment).addToBackStack(null).commitAllowingStateLoss(); 
} 

@Override 
protected void onSaveInstanceState(Bundle outState) { 
} 
private BroadcastReceiver myReceiver = new BroadcastReceiver() 
{ 
    @Override 
    public void onReceive(Context context, Intent intent) { 
     main(); 

    } 
};} 

我有四個選項卡,當我點擊一個選項卡上會顯示相應的屏幕,從該屏幕我正在瀏覽的另一個屏幕在同一tab.but,回到前一個畫面,當我點擊同樣的標籤,我寫了一個廣播接收器。

我收到此錯誤:

08-19 10:13:51.436: E/AndroidRuntime(2830): FATAL EXCEPTION: main 
08-19 10:13:51.436: E/AndroidRuntime(2830): java.lang.RuntimeException: Error receiving broadcast Intent { act=com.venkat.listfragment } in [email protected] 
08-19 10:13:51.436: E/AndroidRuntime(2830):  at android.app.ActivityThread$PackageInfo$ReceiverDispatcher$Args.run(ActivityThread.java:905) 
08-19 10:13:51.436: E/AndroidRuntime(2830):  at android.os.Handler.handleCallback(Handler.java:587) 
08-19 10:13:51.436: E/AndroidRuntime(2830):  at android.os.Handler.dispatchMessage(Handler.java:92) 
08-19 10:13:51.436: E/AndroidRuntime(2830):  at android.os.Looper.loop(Looper.java:123) 
08-19 10:13:51.436: E/AndroidRuntime(2830):  at android.app.ActivityThread.main(ActivityThread.java:4627) 
08-19 10:13:51.436: E/AndroidRuntime(2830):  at java.lang.reflect.Method.invokeNative(Native Method) 
08-19 10:13:51.436: E/AndroidRuntime(2830):  at java.lang.reflect.Method.invoke(Method.java:521) 
08-19 10:13:51.436: E/AndroidRuntime(2830):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:858) 
08-19 10:13:51.436: E/AndroidRuntime(2830):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616) 
08-19 10:13:51.436: E/AndroidRuntime(2830):  at dalvik.system.NativeStart.main(Native Method) 
08-19 10:13:51.436: E/AndroidRuntime(2830): Caused by: java.lang.IllegalStateException: Can not perform this action after onSaveInstanceState 
08-19 10:13:51.436: E/AndroidRuntime(2830):  at android.support.v4.app.FragmentManagerImpl.checkStateLoss(FragmentManager.java:1343) 
08-19 10:13:51.436: E/AndroidRuntime(2830):  at android.support.v4.app.FragmentManagerImpl.enqueueAction(FragmentManager.java:1354) 
08-19 10:13:51.436: E/AndroidRuntime(2830):  at android.support.v4.app.FragmentManagerImpl.popBackStack(FragmentManager.java:493) 
08-19 10:13:51.436: E/AndroidRuntime(2830):  at com.venkat.main.ListFragmentActivity.main(ListFragmentActivity.java:65) 
08-19 10:13:51.436: E/AndroidRuntime(2830):  at com.venkat.main.ListFragmentActivity$1.onReceive(ListFragmentActivity.java:89) 
08-19 10:13:51.436: E/AndroidRuntime(2830):  at android.app.ActivityThread$PackageInfo$ReceiverDispatcher$Args.run(ActivityThread.java:892) 
08-19 10:13:51.436: E/AndroidRuntime(2830):  ... 9 more 

我提到此問題相關的許多環節,但這些都沒有解決我的問題。

+0

我認爲這是與[這個SO問題](http://stackoverflow.com/q/7469082/1051783)中報告和討論的這類問題聯繫在一起的。 – gunar

+0

請停止在您的問題/答案中濫用引號「>」。這並不意味着用於非引號。 – WarrenFaith

回答

6

onResume()中註冊BroadcastReceiver並在onPause()中取消註冊將解決此問題。如果需要,您也可以使用onStart()/onStop()

+0

thanq它的工作很好現在 – Venkat

+0

@beworker感謝回答+1 – KOTIOS

相關問題