Java.lang.IllegalStateException: нет активности

Я создаю приложение для Android, для которого я хотел бы, чтобы моя первая активность состояла из 2 вкладок, одна для профиля пользователя и одна для активности друзей. Для этих вкладок я выбрал TabHost, так как моя панель действий Sherlock уже использует навигацию по списку для перехода к другим действиям, поэтому я не могу использовать навигацию по переходам из панели действий.

Приложение некоторое время работало, но теперь только одна из моих вкладок работает, как только я пытаюсь перейти на вторую вкладку, я получаю java.lang.IllegalStateException: никаких действий

Я добавил вывод Logcat для этой ошибки, хотя я не уверен, что это помогает, поскольку в мой код нет следа.

Я попытался заменить TabHost на FragmentTabHost, но ошибка сохраняется …

Может ли кто-нибудь указать мне на происхождение / значение этой ошибки? Заранее спасибо !

LOGCAT:

04-03 08:19:39.380: W/dalvikvm(958): threadid=1: thread exiting with uncaught exception (group=0x40a71930) 04-03 08:19:39.400: E/AndroidRuntime(958): FATAL EXCEPTION: main 04-03 08:19:39.400: E/AndroidRuntime(958): java.lang.IllegalStateException: No activity 04-03 08:19:39.400: E/AndroidRuntime(958): at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1075) 04-03 08:19:39.400: E/AndroidRuntime(958): at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1070) 04-03 08:19:39.400: E/AndroidRuntime(958): at android.support.v4.app.FragmentManagerImpl.dispatchActivityCreated(FragmentManager.java:1861) 04-03 08:19:39.400: E/AndroidRuntime(958): at android.support.v4.app.Fragment.performActivityCreated(Fragment.java:1474) 04-03 08:19:39.400: E/AndroidRuntime(958): at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:931) 04-03 08:19:39.400: E/AndroidRuntime(958): at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1088) 04-03 08:19:39.400: E/AndroidRuntime(958): at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:682) 04-03 08:19:39.400: E/AndroidRuntime(958): at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1444) 04-03 08:19:39.400: E/AndroidRuntime(958): at android.support.v4.app.FragmentManagerImpl$1.run(FragmentManager.java:429) 04-03 08:19:39.400: E/AndroidRuntime(958): at android.os.Handler.handleCallback(Handler.java:725) 04-03 08:19:39.400: E/AndroidRuntime(958): at android.os.Handler.dispatchMessage(Handler.java:92) 04-03 08:19:39.400: E/AndroidRuntime(958): at android.os.Looper.loop(Looper.java:137) 04-03 08:19:39.400: E/AndroidRuntime(958): at android.app.ActivityThread.main(ActivityThread.java:5041) 04-03 08:19:39.400: E/AndroidRuntime(958): at java.lang.reflect.Method.invokeNative(Native Method) 04-03 08:19:39.400: E/AndroidRuntime(958): at java.lang.reflect.Method.invoke(Method.java:511) 04-03 08:19:39.400: E/AndroidRuntime(958): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793) 04-03 08:19:39.400: E/AndroidRuntime(958): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560) 04-03 08:19:39.400: E/AndroidRuntime(958): at dalvik.system.NativeStart.main(Native Method) 

МЕРОПРИЯТИЯ

 public class HomeActivity extends SherlockFragmentActivity implements ActionBar.OnNavigationListener { private ActionBar mActionBar; private TabHost tHost; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.home_activity_layout); //Setting the list navigation on actionBar mActionBar = getSupportActionBar(); Context context = getSupportActionBar().getThemedContext(); ArrayAdapter<CharSequence> list = ArrayAdapter.createFromResource(context, R.array.list_menu_items, R.layout.sherlock_spinner_item); list.setDropDownViewResource(R.layout.sherlock_spinner_dropdown_item); mActionBar.setDisplayShowTitleEnabled(false); mActionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_LIST); mActionBar.setListNavigationCallbacks(list, this); //Setting the subnavigation with TabHost tHost = (TabHost) findViewById(android.R.id.tabhost); tHost.setup(); /** Defining tab builder for profile tab */ TabHost.TabSpec tabSpecProfile = tHost.newTabSpec("profile"); tabSpecProfile.setIndicator("PROFILE"); tabSpecProfile.setContent(new TabContentMaker(this)); tHost.addTab(tabSpecProfile); /** Defining tab builder for community tab */ TabHost.TabSpec tabSpecCommunity = tHost.newTabSpec("community"); tabSpecCommunity.setIndicator("COMMUNITY"); tabSpecCommunity.setContent(new TabContentMaker(this)); tHost.addTab(tabSpecCommunity); /** Defining Tab Change Listener event. This is invoked when tab is changed */ TabHost.OnTabChangeListener tabChangeListener = getOnTabChangeListener(); /** Setting tabchangelistener for the tab */ tHost.setOnTabChangedListener(tabChangeListener); } @Override public boolean onNavigationItemSelected(int itemPosition, long itemId) { //changing activity here return true; } private TabHost.OnTabChangeListener getOnTabChangeListener(){ TabHost.OnTabChangeListener tabChangeListener = new TabHost.OnTabChangeListener() { @Override public void onTabChanged(String tabId) { android.support.v4.app.FragmentManager fm = getSupportFragmentManager(); MyProfileFragment profileFragment = (MyProfileFragment) fm.findFragmentByTag("profile"); CommunityFeedFragment communityFragment = (CommunityFeedFragment) fm.findFragmentByTag("community"); android.support.v4.app.FragmentTransaction ft = fm.beginTransaction(); /** Detaches the profileFragment if exists */ if(profileFragment!=null) ft.detach(profileFragment); /** Detaches the communityFragment if exists */ if(communityFragment!=null) ft.detach(communityFragment); /** If current tab is profile */ if(tabId.equalsIgnoreCase("profile")){ if(profileFragment==null){ /** Create MyProfileFragment and adding to fragmenttransaction */ ft.add(R.id.realtabcontent,new MyProfileFragment(), "profile"); }else{ /** Bring to the front, if already exists in the fragmenttransaction */ ft.attach(profileFragment); } }else{ /** If current tab is community */ if(communityFragment==null){ /** Create CommunityFragment and adding to fragmenttransaction */ ft.add(R.id.realtabcontent,new CommunityFeedFragment(), "community"); }else{ /** Bring to the front, if already exists in the fragmenttransaction */ ft.attach(communityFragment); } } ft.commit(); } }; return tabChangeListener; } 

АНДРОИД МАНИФЕСТ

 <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.enlavertical" android:versionCode="1" android:versionName="1.0" > <uses-sdk android:minSdkVersion="8" android:targetSdkVersion="17" /> <application android:allowBackup="true" android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/Theme.Styled" > <activity android:name="com.enlavertical.HomeActivity" android:label="@string/app_name" android:screenOrientation="portrait" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application> </manifest> 

Solutions Collecting From Web of "Java.lang.IllegalStateException: нет активности"

Наконец выяснилось, о чем это было: авария «без активности» была связана с тем, что я использовал неправильный FragmentManager для гнездования фрагментов.

Для вложенных фрагментов единственным действующим FragmentManager является тот, который получен в содержащем фрагменте, вызывая getChildFragmentManager() .

Я тоже получил эту ошибку. Наконец, выяснилось, что я переопределял методы onResume () onStop () неправильно

 @Override protected void onResume() { super.onResume(); initilizeMap(); } @Override protected void onStop() { super.onResume(); finish(); } 

Изменил

  @Override protected void onResume() { super.onResume(); initilizeMap(); } @Override protected void onStop() { super.onStop(); finish(); } 

Так глупая ошибка: P

Вам необходимо, чтобы транзакция, которая была совершена после состояния активности, была сохранена …

Используйте ft.commitAllowingStateLoss() вместо ft.commit()

Это решит вашу проблему.

Источник

Я создавал фрагмент в myActivity.onCreate() , вызывая:

 getSupportFragmentManager() .beginTransaction() .remove(frag) .replace(idOfViewBeingReplaced, frag) .commit(); 

При просмотре моего приложения я бы нажал кнопку включения питания, а затем приложение сработало. По-видимому, когда устройство выключено, состояния Activity и Fragment сохраняются, отсоединяются, а затем onCreate() и onCreateView() на фрагментах. В этом состоянии .remove(frag) иначе он будет бросать:

Незаконное государство: нет активности

Итак, я просто удалил .remove(frag) и все снова работает.