5

मैं ViewPagerAdapter को सूचित करना चाहता हूं कि डेटासेट Loader.onLoadFinish कॉलबैक फ़ंक्शन में बदल गया है।FragmentPagerAdapter में फ्रैगमेंट लेन-देन कैसे करें लोडफिनिश कॉलबैक विधि में?

इसे रोका गया है क्योंकि टुकड़ों की स्थिति बचाई जा सकती है।

LoaderManager.LoaderCallbacks.onLoadFinished(Loader loader, D data) विधि दस्तावेज़ से:

ध्यान दें कि सामान्य रूप से एक आवेदन टुकड़ा लेनदेन प्रतिबद्ध करने के लिए है, जबकि इस कॉल में है, क्योंकि यह एक गतिविधि के राज्य के बाद होती है saved.` है अनुमति नहीं है

मैं कैसे इस समस्या को दूर कर सकते हैं? मैं कैसे देख सकता हूं कि Activity कौन सा राज्य Fragment लेनदेन कर रहा है?

उत्तर

4

मैं निम्नलिखित समाधान के साथ आए हैं:

विधि changeCursorInOtherThreadonLoadFinished और onLoaderReset में प्रयोग किया जाता है।

HandlerActivity में बन जाता है:

private Handler mHandler = new Handler(); 

@Override 
protected void onSaveInstanceState(Bundle outState) { 
    super.onSaveInstanceState(outState); 
    mSaved = true; 

} 

private void changeCursorInOtherThread(final Cursor data) { 
    if(!mSaved){ 
     mHandler.post(new Runnable() { 

      @Override 
      public void run() { 
       mViewPagerAdapter.changeCursor(data); 
      } 
     }); 
    } 
} 
1

मैं एक ऐसी ही समस्या थी। onLoadFinished() के बाद DialogFragment दिखाने के लिए चाहता था। जैसा कि आपने कहा है कि onLoadFinished() के अंदर खंड लेनदेन करना संभव नहीं है। लेकिन फिर मुझे एहसास हुआ कि मैं LoaderCallbacks को DialogFragment में लागू कर सकता हूं। और यह एक आकर्षण की तरह काम करता है। को Activity के भीतर अपना काम पूरा करने के बजाय, मैं इसे Fragment के अंदर करता हूं।

आप वही कर सकते हैं। अपनी गतिविधि के अंदर onLoadFinished() को लागू करने के बजाय आप इसे केवल ViewPager में रखे गए टुकड़ों के अंदर कार्यान्वित कर सकते हैं। बेशक कुछ मामलों में यह ViewPager में समझ में नहीं आता है, यह आपकी डेटा संरचना पर निर्भर करता है।

इस मुद्दे पर here पर और चर्चा है।