2013-04-03 5 views
8

मैं एक एंड्रॉइड ऐप बना रहा हूं जिसके लिए मैं अपनी पहली गतिविधि को 2 टैब से बना सकता हूं, एक उपयोगकर्ता की प्रोफ़ाइल के लिए, और एक मित्र की गतिविधि के लिए। इन टैबों के लिए, मैंने एक टैबहोस्ट का चयन किया क्योंकि मेरे शेरलॉक एक्शन बार पहले से ही अन्य गतिविधियों में जाने के लिए सूची नेविगेशन का उपयोग कर रहा है, इसलिए मैं एक्शन बार से टैब नेविगेशन का उपयोग नहीं कर सकता।java.lang.IllegalStateException: कोई गतिविधि

एप्लिकेशन थोड़ी देर के लिए मेरी टैब का केवल एक ही काम किया, लेकिन अब काम करता है, जैसे ही मैंने दूसरे टैब पर ले जाने की कोशिश, मैं एक java.lang.IllegalStateException हो रही है: कोई गतिविधि

मैं इस त्रुटि के लिए लॉगकैट आउटपुट जोड़ा गया, हालांकि मुझे यकीन नहीं है कि यह मदद करता है क्योंकि मेरे कोड पर कोई निशान नहीं है।

मैं एक 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; 
} 

Android मेनिफेस्ट

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

पोस्ट करें एंड्रॉइड मैनिफेस्ट जोड़ा गया है। – 2Dee

+0

गतिविधि वर्ग के ऊपर, आप अपने पैकेज को सही भी परिभाषित करते हैं? 'पैकेज = com.enlavertical;' – Bigflow

उत्तर

22

अंत में पता चला है कि इस बारे में था: "कोई गतिविधि नहीं" दुर्घटना तथ्य यह है कि के कारण हुई थी मैं घोंसले के लिए गलत FragmentManager का उपयोग कर रहा था।

नेस्टेड टुकड़ों के लिए, केवल FragmentManager एक ही वैध getChildFragmentManager() पर कॉल करके युक्त फ्रैगमेंट में प्राप्त किया गया है।

8

मुझे यह त्रुटि भी मिली। अंत में, पता चला कि मैं तरीकों 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(); 
} 

तो बेवकूफ गलती करने के लिए इसे बदल दिया गया था अधिभावी: पी

+0

मैंने भी इसी तरह की चीज की। OnPause() के अंदर super.onResume() को बुलाया गया। ऑनक्रेट() जैसे कुछ तरीकों में उनके सुपर में मिस्ड कॉल्स की सुरक्षा है। – WindRider

+0

धन्यवाद, इसके काम –

1

आप की जरूरत है कि लेनदेन होने के लिए ft.commit()

के बाद एक गतिविधि के राज्य सहेजा जाता है प्रतिबद्ध ...

उपयोग ft.commitAllowingStateLoss() बजाय

इससे आपकी समस्या हल हो जाएगी।

Source

0

मैं फोन करके myActivity.onCreate() में एक टुकड़ा बनाने गया था:

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

मेरे ऐप देखते समय मैं बिजली बंद बटन हिट है और फिर अनुप्रयोग क्रैश हो सकता। जाहिर है, जब डिवाइस बंद हो जाता है, तो गतिविधि और टुकड़े राज्य सहेजे जाते हैं, अलग किए जाते हैं, और फिर onCreate() और onCreateView() को फ्रैगमेंट्स पर बुलाया जाता है।इस स्थिति में, .remove(frag) बुलाया नहीं जा सकता है या फिर फेंक देगा:

अवैध राज्य: कोई गतिविधि नहीं

तो, मैं तो बस .remove(frag) नष्ट कर दिया और सब कुछ फिर से काम कर रहा है।

0

मेरे मामले में मैं एक स्पलैश स्क्रीन का उपयोग कर रहा हूं और मेरे पास मेनएक्चरर = मेनएक्टिविटी में सत्य है।

संबंधित मुद्दे