2012-02-13 8 views
8

लागू करते समय "लोड हो रहा है ..." संकेतक छिपाते हुए मैंने Fragments का उपयोग करके प्रदर्शन बनाया है, जिनमें से दोनों इंटरनेट से खींचे गए डेटा के साथ पॉप्युलेट किए जा रहे हैं। हालांकि कोड स्वयं किसी भी मुद्दे के बिना अपेक्षित काम करता है, एक टुकड़े में से एक (ListFragment के रूप में लागू) खंड के भीतर एक अनिश्चित प्रगति संकेतक प्रदर्शित करता है, जो कि तरफ से निकलता है। मैं सूचक को हटाना चाहता हूं और इसके बजाय एक अलग ProgressDialog का उपयोग करना चाहता हूं जिसे मैंने संकेतक के रूप में कार्यान्वित किया है।सूची लोडिंग

कुछ शोध कर रहा है, मैं समारोह setListShownNoAnimation()ListFragment कक्षा में (here प्रलेखित) की खोज की है, लेकिन निम्न प्रयास काम नहीं किया:

  • कॉलिंग setListShownNoAnimation() टुकड़ा के onActivityCreated()
  • कॉलिंग में इसमें माता-पिता गतिविधि के onCreate
  • टुकड़ा के onCreateView() में यह कॉलिंग (इस वजह से एक IllegalStateException)

मैं खंड की प्रगति संकेतक को कैसे हटा सकता हूं?

+1

setListShown (true) का उपयोग करके कोशिश की? – Warpzit

+0

@Warpzit: एंड्रॉइड एपीआई क्या इंगित करता है, 'setListShown (true)' ListView प्रदर्शित करेगा (जो प्रारंभ और सेट हो सकता है या नहीं)। इसके अतिरिक्त, यह लोडिंग सूचक को अक्षम नहीं लगता है, जो 'setListShownNoAnimation() 'ऐसा प्रतीत होता है। – fayerth

+0

सिर्फ एक अनुमान था :) माफ करना मैं – Warpzit

उत्तर

24

यह करने के लिए सही तरीके से कॉल करने के लिए है। जब आप पृष्ठभूमि में डेटा प्राप्त कर लेते हैं और सूची दिखाने के लिए तैयार होते हैं तो इसे कॉल करें।

+0

यह सही तरीके से प्रतीत होता है जब आप पास करते हैं विधि गलत है, यह स्पष्ट रूप से उपयोगकर्ता को लोडिंग प्रगति संकेतक दिखाना चाहिए जो अच्छा है। समस्या यह है कि, जब मैं अपनी सूचीफ्रेममेंट में इस विधि का उपयोग करता हूं, तो मुझे IllegalStateException मिलता है, जिसका उपयोग कस्टम सामग्री दृश्य के साथ नहीं किया जा सकता है। क्या देता है? – topwik

+0

आप सही हैं। यह आमतौर पर इसे कॉल करने का सही तरीका होना चाहिए। हालांकि मेरी परियोजना को थोड़ा अलग किया गया था, जिसके लिए एक अलग दृष्टिकोण की आवश्यकता थी। मैं आपका जवाब चिह्नित कर रहा हूं अभी भी स्वीकृत उत्तर है। :) – fayerth

+2

इसे एक्टिविटीक्रेटेड में कहा जाना चाहिए। – nima

1

इस तरीके को इस हल करने के लिए सबसे अच्छा तरीका नहीं हो सकता है, लेकिन यह अच्छी तरह से काम करता है:

क्या मैं पहली बार जब मैं layout.xml फ़ाइल में घोषित टुकड़ा सब पर प्रदर्शित नहीं कर रहा था:

<fragment class="com.example.MyListFragment" 
    android:id="@+id/frag_list" 
    android:layout_width="0dp" 
    android:layout_height="match_parent" 
    android:visibility="gone" /> 

तब के बाद डेटा डाउनलोड किया गया है और कार्रवाई की, मैं तो टुकड़ा एक FragmentTransaction का उपयोग कर प्रदर्शित होगा:

FragmentManager fm = getFragmentManager(); 
Fragment frag = fm.findFragmentById(R.id.frag_list); 
FragmentTransaction ft = fm.beginTransaction(); 
ft.show(frag); 
ft.commit(); 

अगर वहाँ रेस लिए एक बेहतर तरीका है इस मुद्दे को ओल्व, मैं सुझावों के लिए खुला हूं।

setListShown(true); 

जब आप ProgressBar छिपा हुआ और ListView दिखाने की जरूरत है:

+0

की मदद नहीं कर सकता था अगर दृश्यता समाप्त हो गई है तो आपको इसे प्रोग्रामिक रूप से दृश्यमान रूप से बदलना चाहिए, 'सेट विविविलिटी (व्यू.विस्बिले); ' – Ivor

1
@Override 
public void onLoadFinished(Loader<Cursor> loader, Cursor cursor) { 
    adapter.swapCursor(cursor); 
    if(isResumed()) { 
     setListShown(true); 
    } else { 
     setListShownNoAnimation(true); 
    } 
} 

लेकिन आप जहां ListAdapter सेट setListShown(false) किया है। यह ठीक काम करता है।

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