2013-04-03 5 views
8

私は私が私の最初の活動は2つのタブ、友人の活動のために、ユーザーのプロファイルに1つ、および1つから構成することがしたい対象のAndroidアプリを構築しています。これらのタブでは、Sherlock Action Barがすでにリストナビゲーションを使って他のアクティビティに移動しているので、TabHostを選択したので、アクションバーからタブナビゲーションを使用することはできません。java.lang.IllegalStateException:いいえ活動

アプリは今、私のタブを1つだけしばらくの間働いたが、私は2番目のタブに移動しようとするとすぐに、動作しますが、私はjava.lang.IllegalStateException取得しています:いいえ活動を

IこのエラーのLogcat出力を追加しましたが、私のコードにトレースが戻ってこなかったので、私はそれが助けになるとは確信していません。

私はFragmentTabHostでTabHostを交換しようとしたが、エラーが解決しない...

は、誰もが親切にこのエラーの起源/意味に私を指すことができますか?前もって感謝します !

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; 
} 

アンドロイドMANIFEST

<?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> 
+0

AndroidManifest.xmlファイルコード – Pratik

+0

Android Manifestが追加されました。 – 2Dee

+0

アクティビティクラスの上に、パッケージを正しく定義することもできますか? 'package = com.enlavertical;' – Bigflow

答えて

22

最後に、これは約何であったかが分かった: "活動なし" クラッシュは、その事実のためでした私は間違ってFragmentManagerを使用して、Fragmentsをネストしていました。

ネストされたフラグメントの場合、唯一有効なFragmentManagerは、包含フラグメントで取得されたもので、getChildFragmentManager()を呼び出して有効です。

8

このエラーもあります。あなたが取引をすることを必要とするP

+0

私は同じようにお金を払った。 onPause()内でsuper.onResume()を呼び出しました。 onCreate()のようないくつかのメソッドは、スーパーへの不在着信を独自に保護しています。 – WindRider

+0

ありがとう、その作品 –

1

:最後に、私はメソッド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(); 
} 

だから、愚かな間違いにそれを変更をオーバーライドしていることが分かりましたアクティビティの状態が保存された後にコミットされます...

の代わりに ft.commitAllowingStateLoss()を使用してください。

これで問題は解決します。

Source

0

私は呼び出すことによってmyActivity.onCreate()でフラグメントを作成していた:私は電源オフボタンを押してしまうと、その後アプリがクラッシュする

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

を私のアプリを見ながら。どうやら、デバイスの電源がオフになると、アクティビティとフラグメントの状態が保存され、デタッチされた後、onCreate()onCreateView()がフラグメントで呼び出されます。この状態では、.remove(frag)を呼び出すことができないか、そうでなければスローされます。

違法状態:アクティビティ

だから、私はちょうど.remove(frag)を削除していない、すべてが再び取り組んでいます。

0

私の場合、スプラッシュ画面を使用していて、私はMainActivityでMainLauncher = trueを持っていました。

関連する問題