2014-04-30 8 views
5

पर बुलाया जा रहा है नहीं onActivityCreated मैं टुकड़े के साथ काम कर रहा हूँ और backstack पर नए टुकड़े धक्का लेकिन जब मैं डिवाइस दो बार बारी बारी से टुकड़ा के onCreateView, onActivityCreated, और इतने पर टुकड़ा जीवन में चक्र तरीकों कभी नहीं कहा जाता है छोड़ने एक खाली स्क्रीन। यह तब होता है जब बैकस्टैक में एक टुकड़ा जोड़ा गया है या बैकस्टैक में पहले खंड में लौट रहा है।टुकड़ा onCreateView और रोटेशन

यहाँ मेरी गतिविधि का टुकड़ा से निपटने के तरीकों है: गतिविधि के लिए

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    MormonChannel.injectFragment(this); 
} 

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
    View v = inflater.inflate(R.layout.collection_list_fragment, container, false); 
    ButterKnife.inject(this, v); 
    return v; 
} 

@Override 
public void onActivityCreated(Bundle savedInstanceState) { 
    super.onActivityCreated(savedInstanceState); 

    listView.setDividerHeight(0); 
    listView.setFastScrollEnabled(true); 


    Bundle args = getArguments(); 
    if (args != null) { 
     languageId = args.getLong(ARG_LANGUAGE_ID, -1L); 
     collectionId = args.getLong(ARG_COLLECTION_ID, -1L); 
     if (args.containsKey(ARG_SORT)) { 
      sort = (Sort) args.getSerializable(ARG_SORT); 
     } 
    } 

    if (collectionId == -1L || languageId == -1L) { 
     // TODO Implement Empty Collection Text 
    } else { 
     collection = collectionManager.findByCollectionId(languageId, collectionId); 
     getLoaderManager().initLoader(LOADER_ID, null, this); 
    } 

    titleEvent = new TitleChangeEvent(collection != null ? collection.getTitle() : getString(R.string.app_name)); 
    bus.post(titleEvent); 
} 

मैनिफ़ेस्ट::

<activity 
    android:name=".activity.MainActivity" 
    android:launchMode="singleTask"> 
    <meta-data 
     android:name="android.app.default_searchable" 
     android:value=".activity.SearchActivity"/> 
</activity> 
+0

यह व्याख्यान आपकी मदद कर सकता है: http://stackoverflow.com/questions/8474104/android-fragment-lifecycle-over-orientation-changes में कुछ अच्छा समझाते हुए जवाब – shkschneider

+0

मैं इसे अपनी गतिविधि के ऑनक्रेट विधि के माध्यम से ध्यान में रख रहा हूं । – Ge3ng

+1

आपके पास आपके मैनिफेस्ट में आपकी गतिविधि के लिए "configChanges" तत्व नहीं है? इससे गतिविधि को घुमाने पर फिर से बनाया जा सकता है। – NasaGeek

उत्तर

1

अपने CollectionListFragment कोड में, कॉल जोड़ने

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    // Injection 
    MormonChannel.injectActivity(this); 

    setDrawerIndicatorEnabled(true); 

    // Do not set currentNavigationItem here. 
    NavigationItemSelectedEvent.NavigationItem navItem = null; 
    Intent intent = getIntent(); 
    if (intent != null) { 
     navItem = (NavigationItemSelectedEvent.NavigationItem) 
     intent.getSerializableExtra(EXTRA_NAV_ITEM); 
    } 

    if (savedInstanceState == null) { 
     FragmentManager fm = getSupportFragmentManager(); 
     fm.beginTransaction().replace(R.id.container, new FeatureListFragment()).commit(); 
     if (navItem != null) { 
      onNavigationItemSelected(new NavigationItemSelectedEvent(navItem)); 
     } else { 
      currentNavigationItem = NavigationItemSelectedEvent.NavigationItem.FEATURES; 
     } 
    } 

} 

@Subscribe 
public void onNavigationItemSelected(NavigationItemSelectedEvent event) { 

    if (currentNavigationItem == event.getNavigationItem()) { 
     return; 
    } 
    FragmentManager fragmentManager = getSupportFragmentManager(); 
    fragmentManager.popBackStack(); 
    NavigationItemSelectedEvent.NavigationItem navigationItem = event.getNavigationItem(); 
    String name = navigationItem.getName(); 
    switch (navigationItem) { 
     default: 
     case FEATURES: 
      // Nothing needs to be done it is already there. 
      break; 
     case AUDIO: 
      fragmentManager.beginTransaction().replace(R.id.container, 
        CollectionListFragment.newInstance(prefs.getLanguageId(), prefs.getAudioCollectionId())) 
        .addToBackStack 
          (name).commit(); 
      break; 
     case VIDEO: 
      fragmentManager.beginTransaction().replace(R.id.container, 
        CollectionListFragment.newInstance(prefs.getLanguageId(), prefs.getVideoCollectionId())) 
        .addToBackStack(name).commit(); 
      break; 
     case RADIO: 
      fragmentManager.beginTransaction().replace(R.id.container, 
        CollectionListFragment.newInstance(prefs.getLanguageId(), prefs.getRadioCollectionId())) 
        .addToBackStack(name).commit(); 
      break; 
     case HISTORY: 
      fragmentManager.beginTransaction().replace(R.id.container, new HistoryFragment()).addToBackStack(name).commit(); 
      break; 
     case DOWNLOADS: 
      fragmentManager.beginTransaction().replace(R.id.container, new DownloadsFragment()).addToBackStack(name).commit(); 
      break; 
     case PLAYLISTS: 
      fragmentManager.beginTransaction().replace(R.id.container, new PlaylistFragment()).addToBackStack(name).commit(); 
      break; 
    } 
    currentNavigationItem = navigationItem; 
} 

यहाँ मेरी CollectionListFragment कोड है onRreate() विधि मेंRetainInstance() विधि को सेट करने के लिए, इसके तर्क के रूप में सत्य के साथ क:

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setRetainInstance(true); 
    MormonChannel.injectFragment(this); 

} 

setRetainInstance (सही) का उपयोग सुनिश्चित करता है कि जब विन्यास परिवर्तन होते गतिविधि को मार डाला किया जाएगा, लेकिन एंड्रॉयड टुकड़ा यह आयोजन कर रहा है को नष्ट नहीं होंगे।

इसके बजाय एंड्रॉइड खंड राज्य को बचाएगा और गतिविधि से टुकड़े को अलग करेगा। इसके अलावा यह टुकड़े को नष्ट नहीं करेगा और इसलिए यह होस्टिंग गतिविधि बनने पर बाद में इसे नहीं बनाएगा। इसलिए टुकड़े को अपने ऑनस्ट्रोय() और ऑनक्रेट() विधियों पर कॉल नहीं मिलेगी।

+0

इस तस्वीर के बारे में क्या (fragmnet lificycle) - https://www.safaribooksonline.com/library/view/android-programming-the/9780132869126/ciUIFragments/fragment_lifecycle.png - यह आपके सभी अनावश्यक को अप्रासंगिक बनाता है –

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