OnNewIntent yönteminde gezinme sekmesini değiştirmeyi denediğimde, FragmentActivity (singleTop) bana IllegalStateException veriyor.Anahtar sekmesiNewIntent nedeni IllegalStateException
Daha açık söylemek gerekirse, Uygulamam, üç sekmeyle birlikte SherlockActionBar'ı kullanır, bir alma bildirimi alındığında (ve niyet çağrıldığında) bir sekme güncellenir; onNewIntent) Sekmeyi (ve dolayısıyla parçayı) bar.setSelectedNavigationItem() ile üçüncü sekmeye değiştiriyorum ve bu bana sorun yaratıyor. Uygulama üçüncü sekmede askıya alındıysa, istisna gerçekleşmez.
Kodu:
@Override
public void onNewIntent(Intent intent) {
super.onNewIntent(intent);
Bundle bundle = intent.getExtras();
if (bundle != null) {
bar.setSelectedNavigationItem(Utils.ORDER_STATUS_TAB_ID);
} else {
}
}
push bildirim niyet:
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 yöntemi
@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
}
detaylı istisna (stacktrace hat 56 üzerinde yorum ile) :
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)
Aynı sorunu yaşadım. Bir ft.commitAllowingStateLoss() ekleyerek, ActionBar.TabListener uygulamasını hacklemek için çok çalışıyordum, ancak Sharlock'un kendisi de ft.commit() işlevini çağırır, iki kez işlenemez. Ayrıca http://stackoverflow.com/a/10261438/245345 adresindeki cevabı da denedim, ancak yardımcı olmayacak. Sonunda iyi çalışan çözümünüzü buldum. Teşekkürler. –