2011-09-04 24 views
32

मैंने हर जगह खोज की है और मुझे इस समस्या का हल नहीं मिल रहा है।एंड्रॉइड डायलॉग फ्रैगमेंट प्रगति बार

असल में मेरे पास एक लॉगिन स्क्रीन है और मैं सर्वर पर लॉग इन करने के दौरान एक प्रगति स्पिनर प्राप्त करने की कोशिश कर रहा हूं (थ्रेड के माध्यम से), और फिर लॉगिन सफल होने के बाद इसे खारिज कर दें। उन्मुखता बदलने के दौरान इसे काम करना है।

मैं एंड्रॉयड अनुकूलता पैकेज एक प्रगति बार बनाने के लिए साथ DialogFragment उपयोग कर रहा हूँ (इस पर कोई प्रलेखन नहीं मिल रहा है, only for basic\alert dialog) क्योंकि showDialog() अब मान्य नहीं है। अभी मैं एक लॉगिन स्पिनर के रूप में एक कस्टम संदेश बॉक्स दिखाता हूं।

सारांश में:

  • मैं कैसे DialogFragment के साथ एक प्रगति स्पिनर सेट कर सकते हैं।
  • अभिविन्यास परिवर्तन के बाद मैं इसे किसी अन्य धागे में कैसे खारिज कर सकता हूं।

उत्तर

21

मैं जानता हूँ कि इस पुराने सवाल है, लेकिन मैं Android विकास Protip के अनुसार इस

के लिए काफी बेहतर समाधान साझा करना चाहते हैं:

"ProgressDialog का उपयोग बंद करें, इनलाइन संकेतक अपने दोस्त रहे हैं"

के रूप में रोमन Nurik states:

enter image description here

यह एक तेज़ है। ProgressDialog और अन्य मोडल लोडिंग संकेतक का उपयोग करना बंद करें। वे अत्यंत रुकावटी और कष्टप्रद हो, विशेष रूप से जब:

  • आप एक हर बार देखते हैं कि आप टैब स्विच।

  • आप उनसे बाहर नहीं जा सकते हैं।

  • वे कहते हैं "कृपया प्रतीक्षा करें।" नहीं धन्यवाद, मैं बस अनइंस्टॉल करना चाहता हूं।

या तो शो लोड हो रहा है संकेतक इनलाइन अपनी सामग्री के साथ (जैसे http://developer.android.com/training/animation/crossfade.html) या बेहतर अभी तक, पृष्ठभूमि में थोड़ा सा डेटा लोड इतना है कि आप भी एक लोड हो रहा है सूचक को दिखाने के लिए की जरूरत को कम।

प्रगति के बारे में & design guidelines में गतिविधि के बारे में अधिक जानकारी।

+1

सावधानी के रूप में, जब आप किसी दूसरे के शब्दों की प्रतिलिपि बनाते हैं, तो आपको उन चीज़ों को ठीक से ब्लॉक करना होगा जिन्हें आप कॉपी करते हैं, और आपको एक प्रदान करना होगा मूल स्रोत से लिंक करें। –

+0

पर्याप्त सच है, लेकिन उन मामलों के बारे में क्या है जहां आप ऐप के साथ आगे नहीं बढ़ सकते हैं जब तक कि कुछ सफलतापूर्वक मुद्रित नहीं किया जाता है? चूंकि प्रिंट सफल होने पर डेटा को अपडेट और सहेज सकते हैं और यदि ऐसा नहीं होता है, तो आपको उपयोगकर्ता को फिर से प्रयास करने/डेटा बदलने का मौका देना होगा। मुझे अभी तक इसे दिखाने के बिना इसे संभालने का कोई तरीका नहीं है स्पिनर का इंतजार करो। – AgentKnopf

+0

@Zainodis इनलाइन प्रगति पट्टी को छुपाएं/अदृश्य करें और त्रुटि संदेश प्रदर्शित करने के लिए Crouton का उपयोग करें, आप प्रिंट बटन नाम को फिर से प्रिंट करने के लिए बदल सकते हैं। सभी सामग्री को दिखाने के लिए ShowProgress (true) ShowProgress (false) कहां कॉल करते हैं, इस पर निर्भर करता है। Crouton के बारे में –

59

एक प्रगति स्पिनर दिखा के लिए, बस DialogFragment.onCreateDialog() अपने संवाद टुकड़ा में इस तरह ओवरराइड (onCreateView() ओवरराइड करने के लिए कोई जरूरत नहीं):

@Override 
public Dialog onCreateDialog(final Bundle savedInstanceState) { 
    final ProgressDialog dialog = new ProgressDialog(getActivity()); 
    // 
    dialog.setTitle(R.string.login_title); 
    dialog.setMessage(getString(R.string.login_message)); 
    dialog.setIndeterminate(true); 
    dialog.setCancelable(false); 
    // etc... 
    return dialog; 
} 

खारिज कहीं और से है कि संवाद टुकड़ा के रूप में, आप की आवश्यकता होगी FragmentManager (अपने अगले FragmentActivity या Fragment के अंदर से) प्राप्त करने के लिए और popBackStack() पर कॉल करें (यदि आप इस दौरान कोई अन्य खंड लेनदेन नहीं करते हैं)।

यदि आपके प्रगति संवाद खंड और अगली गतिविधि के बीच अधिक कदम/खंड लेनदेन हैं, तो आपको शायद अन्य popBackStack(...) विधियों में से एक की आवश्यकता होगी जो आपकी प्रगति के लिए सब कुछ पॉप करने के लिए आईडी या टैग लेते हैं, स्टैक से खंड खंड ।

+1

आप setTitle है दो बार, लगता है कि आप का मतलब है, dialog.setMessage (R.string.login_message) – worked

+0

@worked धन्यवाद, मैं यह तय - वहाँ 'ProgressDialog' पर कोई' setMessage (int) है ', हालांकि, तो मुझे 'सेटमेसेज (स्ट्रिंग)' का उपयोग करना पड़ा। –

+17

मैं यह जोड़ना चाहता हूं कि 'डायलॉग फ्रैगमेंट' में' डेमरी 'विधि है जिसका उपयोग बैक स्टैक पॉपिंग के पक्ष में किया जा सकता है। बस 'FindFragmentByTag'', 'DialogFragment' और 'dismisser()' – Greyson

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