onNewIntentメソッドのナビゲーションタブを切り替えると、私のFragmentActivity(singleTop)がIllegalStateExceptionを送出しています。スイッチタブonNewIntent原因IllegalStateException
具体的には、私のアプリケーションでは、3つのタブを持つSherlockActionBarを使用しています。プッシュ通知を受け取ったとき(およびインテントが呼び出されたとき)、アプリケーションが別のタブで中断された場合、 onNewIntent)bar.setSelectedNavigationItem()を使用してタブ(したがってフラグメント)を3番目のタブに変更すると、これが問題の原因になります。アプリが3番目のタブで中断された場合、例外は発生しません。
コード:
@Override
public void onNewIntent(Intent intent) {
super.onNewIntent(intent);
Bundle bundle = intent.getExtras();
if (bundle != null) {
bar.setSelectedNavigationItem(Utils.ORDER_STATUS_TAB_ID);
} else {
}
}
プッシュ通知の意図:
Intent notificationIntent = new Intent(context,
MainActivity.class);
notificationIntent.putExtra("orderUpdate",
new Gson().toJson(orderUpdate));
notificationIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK
| Intent.FLAG_ACTIVITY_SINGLE_TOP);
PendingIntent contentIntent = PendingIntent.getActivity(context, 0,
notificationIntent, 0);
notification.contentIntent = contentIntent;
TabListener法(スタックトレースのライン56上のコメント付き)
@Override
public void onTabSelected(Tab tab, FragmentTransaction ft) {
ft = activity.getSupportFragmentManager().beginTransaction();
ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE);
if (mFragment == null) {
mFragment = Fragment
.instantiate(activity, mClass.getName(), mArgs);
ft.add(android.R.id.content, mFragment, tag);
ft.commit();
} else {
ft.attach(mFragment);
ft.commit(); // line 56
}
詳細な例外:
07-12 20:06:40.959: E/AndroidRuntime(8639): java.lang.IllegalStateException: Can not perform this action after onSaveInstanceState
07-12 20:06:40.959: E/AndroidRuntime(8639): at android.support.v4.app.FragmentManagerImpl.checkStateLoss(FragmentManager.java:1299)
07-12 20:06:40.959: E/AndroidRuntime(8639): at android.support.v4.app.FragmentManagerImpl.enqueueAction(FragmentManager.java:1310)
07-12 20:06:40.959: E/AndroidRuntime(8639): at android.support.v4.app.BackStackRecord.commitInternal(BackStackRecord.java:541)
07-12 20:06:40.959: E/AndroidRuntime(8639): at android.support.v4.app.BackStackRecord.commit(BackStackRecord.java:525)
07-12 20:06:40.959: E/AndroidRuntime(8639): at com.wizche.ui.MyTabListener.onTabSelected(MyTabListener.java:56)
07-12 20:06:40.959: E/AndroidRuntime(8639): at com.actionbarsherlock.internal.app.ActionBarImpl.selectTab(ActionBarImpl.java:526)
07-12 20:06:40.959: E/AndroidRuntime(8639): at com.actionbarsherlock.internal.app.ActionBarImpl.setSelectedNavigationItem(ActionBarImpl.java:317)
07-12 20:06:40.959: E/AndroidRuntime(8639): at com.wizche.MainActivity.onNewIntent(MainActivity.java:205)
私は非常に同じ問題を抱えていました。私は、ActionBar.TabListenerの実装をハッキングしようとしていましたが、ft.commitAllowingStateLoss()を追加しましたが、Sharlock自身もft.commit()を呼び出します.2回コミットすることはできません。私もhttp://stackoverflow.com/a/10261438/245345で回答を試みましたが、それは役に立たないでしょう。最後に、あなたの解決策を見つけました。これはうまくいきます。ありがとう。 –