2014-10-18 5 views
12

सभी नवीनतम एंड्रॉइड 5.0 उपहारों में अपना एसडीके अपडेट करने के बाद मैं एपकैप में एक्शनबार में निर्मित प्रगति पट्टी का उपयोग नहीं कर सकता। मैंने सभी सामान्य फिक्स्ड (moveCequestWindowFeature() को setContent() से पहले और सुपर कॉल में सुपर कॉल से पहले कॉल किया है) लेकिन कुछ भी काम नहीं करता है।एपकोपेट एक्शन बार में प्रगति दिखाता है एनपीई

public class LoginActivity extends ActionBarActivity { 
protected void onCreate(Bundle savedInstanceState) { 
    supportRequestWindowFeature(Window.FEATURE_INDETERMINATE_PROGRESS); 
    super.onCreate(savedInstanceState); 

    setContentView(R.layout.login); 
    ... 
    loginButton.setOnClickListener(new View.OnClickListener() { 

     @Override 
     public void onClick(View v) { 
       ... 
       setSupportProgressBarIndeterminateVisibility(true); 
     } 
    }); 

} और स्टैक ट्रेस: ​​

10-18 19:38:21.053: E/AndroidRuntime(11206): java.lang.NullPointerException: Attempt to invoke  virtual method 'void android.support.v7.internal.widget.ProgressBarCompat.setVisibility(int)' on a null object reference 
10-18 19:38:21.053: E/AndroidRuntime(11206): at android.support.v7.app.ActionBarActivityDelegateBase.updateProgressBars(ActionBarActivityDelegateBase.java:786) 
10-18 19:38:21.053: E/AndroidRuntime(11206): at android.support.v7.app.ActionBarActivityDelegateBase.setSupportProgressBarIndeterminateVisibility(ActionBarActivityDelegateBase.java:692) 
10-18 19:38:21.053: E/AndroidRuntime(11206): at android.support.v7.app.ActionBarActivity.setSupportProgressBarIndeterminateVisibility(ActionBarActivity.java:327) 
10-18 19:38:21.053: E/AndroidRuntime(11206): at com.myapppackage.LoginActivity$2.onClick(LoginActivity.java:82) 

यह एक नेक्सस 5 एंड्रॉयड 4.4.4 चलाने पर है यहाँ मैं क्या कर रहा है। ऐप थीम Theme.AppCompat से विरासत में मिलता है। ऐप एंड्रॉइड 5.0 के साथ बनाया गया है और लक्ष्य एसडीके 21 है। जब मैं एक सामान्य क्षैतिज प्रगति पट्टी के लिए setSupportProgress का उपयोग करता हूं, वही होता है। किसी भी मदद की बहुत सराहना की।

संपादित करें: समस्या मिली। android.support.v7.internal.widget.ToolbarWidgetWrapper में:

@Override 
public void initIndeterminateProgress() { 
    Log.i(TAG, "Progress display unsupported"); 
} 

शायद नहीं एक बग लेकिन एक सुविधा? टूलबार नए एक्शनबार हैं।

मेरे पास किसी अन्य कंप्यूटर पर वी 20 एपकोपेट की एक प्रति है इसलिए मैं उस पर वापस जा रहा हूं।

+2

क्रिस प्रतिबंधों से पुष्टि https://chris.banes.me/2014/10/17/appcompat-v21/#comment-1642002459 – Mark

+0

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

उत्तर

2

संपादित करें: नीचे काम नहीं करता है क्योंकि ProgressBarCompat एक छिपी हुई कक्षा है और इसे आपके एक्सएमएल लेआउट में जोड़ा नहीं जा सकता है। यह एपकोपेट लाइब्रेरी में एक बग की तरह लगता है।


यह ActionBarActivityDelegateBase.java में एक प्रगति बार की तलाश में है:

private ProgressBarCompat getCircularProgressBar() { 
    ProgressBarCompat pb = (ProgressBarCompat) mActivity.findViewById(R.id.progress_circular); 
    if (pb != null) { 
     pb.setVisibility(View.INVISIBLE); 
    } 
    return pb; 
} 

और एक ही कक्षा में updateProgressBars() विधि में इसका उपयोग करने। ऐसा लगता है कि यह आपकी गतिविधि में ProgressBarCompat जोड़ने के लिए डेवलपर पर निर्भर है।

+1

मैंने इसे अपने उत्तर में जोड़ा लेकिन Google इस सुविधा को एपकोपेट लाइब्रेरी से हटा रहा है। https://code.google.com/p/android/issues/detail?id=78310 – SWoo

4

यह अनिश्चित प्रगति की तरह दिखता है और क्षैतिज प्रगति पट्टी समर्थन पुस्तकालय V21 में समर्थित नहीं है। android.support.v7.internal.widget.ToolbarWidgetWrapper से:

@Override 
public void initIndeterminateProgress() { 
    Log.i(TAG, "Progress display unsupported"); 
} 

क्रिस बेंस इस की पुष्टि की है: http://chris.banes.me/2014/10/17/appcompat-v21/#comment-1642002459। मैं appcompat v20 की पुरानी प्रति का उपयोग कर रहा हूं। यहाँ जो की जरूरत है किसी के लिए भी एक ज़िप है यह: https://drive.google.com/file/d/0B2dSjU9N8KdZUEFuMkhLZzJZOFU/view?usp=sharing

12

इस के लिए एक संभावित समाधान, मैन्युअल setSupportProgressBarIndeterminateVisibility

onCreate में कस्टम दृश्य भी एक ProgressBar जोड़ सकते हैं और ओवरराइड करने के लिए होगा:

ProgressBar progressBar = new ProgressBar(this); 
progressBar.setVisibility(View.GONE); 
progressBar.setIndeterminate(true); 
getSupportActionBar().setDisplayShowCustomEnabled(true); 
getSupportActionBar().setCustomView(progressBar); 

आपकी गतिविधि में:

@Override 
public void setSupportProgressBarIndeterminateVisibility(boolean visible) { 
    getSupportActionBar().getCustomView().setVisibility(visible ? View.VISIBLE : View.GONE); 
} 

बेशक टूलबार पर स्विच करना और प्रोग्रेसबार जोड़ना और भविष्य में सबूत होना चाहिए।

+0

यह काम करता है यदि आप सेट कस्टम्यू व्यू का उपयोग लेआउट पैराम्स के साथ गुरुत्वाकर्षण शीर्ष और चौड़ाई को पैरेंट से मिलान करने के लिए सेट करते हैं। दुर्भाग्यवश, यदि कोई शीर्षक और 3 डॉट मेनू मौजूद है तो इसमें एक्शन बार की 100% चौड़ाई शामिल नहीं है। मैं एक्शन बार के ऊपरी दाएं भाग में गोलाकार शैली की उम्मीद कर रहा था लेकिन यह वैसे भी एक और अधिक अद्यतित हो सकता है। – Mark

+0

दो प्रगति पट्टी नहीं पता क्यों ?? – user2273146

2

किसी और के लिए अपने ऐप/पुस्तकालयों का अपग्रेड करने के लिए - उन्होंने ऐप्सअपपोर्ट v7 लाइब्रेरी में प्रोग्रेसबार के लिए समर्थन छोड़ दिया है।https://code.google.com/p/android/issues/detail?id=78310

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