2012-03-30 15 views
5

में मेनू आइटम पर दृश्य बदलना मैं अपने ऐप में रीफ्रेश बटन को लागू करने का प्रयास कर रहा हूं ताकि उपयोगकर्ता को वेब सर्वर पर मैन्युअल रूप से फिर से सिंक हो सके। कोड काम करता है, लेकिन मुझे एक्शन व्यू को समझने में परेशानी हो रही है (कम से कम, मुझे लगता है कि मैं यही उपयोग कर रहा हूं)।एक्शन बार

मेरे मेनू आइटम यहाँ है:

<item 
    android:id="@+id/main_menu_refresh" 
    android:enabled="true" 
    android:icon="@drawable/refresh" 
    android:orderInCategory="1" 
    android:showAsAction="ifRoom" 
    android:title="@string/refresh" 
    android:actionViewClass="android.widget.ProgressBar"> 
</item> 

समस्या है, यह हमेशा ProgressBar को दर्शाता है। मुझे आश्चर्य हुआ कि क्या यह खोज विजेट (एकमात्र उदाहरण है जिसे मैं वास्तव में ऑनलाइन देखता हूं) की तरह काम करता हूं और collapseActionView टैग को showAsAction पर जोड़ा और इसे तुरंत दिखाए जाने से रोका। हालांकि, जब मैं रीफ्रेश बटन पर क्लिक करता हूं, तो आइकन गायब हो जाता है (अच्छा), लेकिन एक्शन बार में शीर्षक भी होता है, और प्रोग्रेसबार विंडो के बाईं ओर दिखाई देता है जहां शीर्षक होता था। मैं जो भी चाहता था वह भी नहीं।

MenuItem refresh = (MenuItem)findViewById(R.id.main_menu_refresh); 
Log.w("MyApp", "Have Menu"); 
ProgressBar pb = new ProgressBar(ReadingList.this); 
refresh.setActionView(pb); 

कि या तो काम नहीं किया, मुझ पर एक अशक्त सूचक त्रुटि है:

एक अंतिम खाई प्रयास के बारे में कुछ के रूप में, मैं अपने कोड में जोड़ने के लिए, और XML से actionViewClass को दूर करने का प्रयास किया setActionView

मैं एक समाधान है कि मैं किसी भी समारोह से कॉल कर सकते हैं की जरूरत है, और यह करने के लिए वापस करने में सक्षम हो के बाद स्थिर आइकन है (वहाँ शुरुआत में एक स्वत: समन्वयन अवधि मैं ProgressBar रूप में अच्छी तरह के दौरान प्रदर्शित करना चाहते हैं) है।

मैंने this question के माध्यम से पढ़ने की कोशिश की, लेकिन मुझे जवाब देने में समस्या आ रही है। मुझे लगता है कि मैं जो कुछ कहता हूं वह करने की कोशिश कर रहा था, लेकिन मुझे नहीं लगता। किसी भी सहायता की बहुत सराहना की है।

संपादित करें: Sastraxi के सुझाव के लिए।

public class IconSwitcher extends LinearLayout{ 



public IconSwitcher(Context context) { 
    super(context); 

    ProgressBar pb = new ProgressBar(context); 
    ImageView iv = new ImageView(context); 

    addView(iv); 
    addView(pb); 
} 
} 

यह मेरी कक्षा अब तक है। हालांकि, मैं जब कोशिश करते हैं और साथ इसे संदर्भ:

MenuItem refresh = (MenuItem)findViewById(R.id.main_menu_refresh); 
IconSwitcher ic = (IconSwitcher) refresh.getActionView(); 

मैं एक अशक्त सूचक त्रुटि मिलती है। IconSwitcher बनाने पर।

<item 
    android:id="@+id/main_menu_refresh" 
    android:enabled="true" 
    android:icon="@drawable/refresh" 
    android:orderInCategory="1" 
    android:showAsAction="ifRoom" 
    android:title="@string/refresh" 
    android:actionViewClass="IconSwitcher"> 
</item> 

मैं सिर्फ संदर्भित IconSwitcher देखें कि पर एक कठिन समय हो रही है: बटन XML इस प्रकार है।

संपादित करें 2: मुझे मेनू आइटम को संदर्भित करने में परेशानी हो रही है।

MenuItem refresh = (MenuItem)findViewById(R.id.main_menu_refresh); 
refresh.setVisible(false); 

इसके अलावा मुझे एक नल पॉइंटर देता है जब मैं कोशिश करते हैं और दृश्यता की स्थापना की। मेरे संदर्भों में क्या गलत है?

+0

यह सेटएक्शन व्यू में विफल नहीं है, लेकिन उस बिंदु पर जहां आप कर रहे हैं (MenuItem) findViewById (R.id.main_menu_refresh)। जाहिर है यह एक्शनआईटिव्यू को मेनूइटम पर डालने के लिए क्लासकास्ट अपवाद है। – Namratha

+0

मैंने इसे समझ लिया। मुझे यह पिछला [SO] मिला है (http://stackoverflow.com/questions/7142722/replacing-an-actionbar-menu-item-icon-with-an-indeterminate-progressbar) प्रश्न। वहां से, मुझे यह कोड मिला [Google] [http://developer.android.com/resources/samples/ActionBarCompat/src/com/example/android/actionbarcompat/ActionBarHelperHoneycomb.html) पर Google ने लिखा था। यह मूल रूप से उस बिंदु पर कॉपी और पेस्ट था, और पूरी तरह से काम करता है। –

उत्तर

0
बजाय एक ProgressBar को अपनी कार्रवाई दृश्य वर्ग की स्थापना की

, एक कस्टम LinearLayout वर्ग के लिए यह निर्धारित करते हैं, जैसे:

class MyViewItem extends LinearLayout 

एक ProgressBar और एक ImageViewaddView के साथ अपने निर्माता में बच्चों के रूप में, और इन सेट GONE या VISIBLE के रूप में बच्चों की दृश्यताएं जब आपके कोड की आवश्यकता होती है।

+0

मुझे समझ में परेशानी हो रही है। क्या आप मुझे इस कस्टम वर्ग पर थोड़ा और विवरण दे सकते हैं? मैंने यह दिखाने के लिए मुख्य पोस्ट में और जोड़ा कि मुझे क्या परेशानी हो रही है। –

+0

आपको XML में पूर्ण-योग्य नाम का उपयोग करने की आवश्यकता है, उदा। 'com.mydomain.mypackage.IconSwitcher', बस 'IconSwitcher' की बजाय। कोशिश करें, देखें कि चीजें काम करना शुरू कर देती हैं या नहीं। – sastraxi

+0

नहीं, मुझे अभी भी एक शून्य सूचक त्रुटि है। यह निश्चित रूप से 'IconSwitcher ic = (IconSwitcher) refresh.getActionView();' line पर भी है। अगर मैं उस लाइन को टिप्पणी करता हूं, तो मुझे कोई त्रुटि नहीं मिलती है, लेकिन मुझे स्पष्ट रूप से गतिशील बटन नहीं मिलता है, केवल स्थिर आइकन। क्या मुझे किसी भी तरह से मैनिफेस्ट में आइकन स्किचर घोषित करने की ज़रूरत है? –

0

उपयोग करने के लिए प्रयास करें:

<item 
    android:id="@+id/main_menu_refresh" 
    android:enabled="true" 
    android:icon="@drawable/refresh" 
    android:orderInCategory="1" 
    android:title="@string/refresh" 
    app:showAsAction="ifRoom" 
    app:actionViewClass="android.widget.ProgressBar"> 
</item> 

नोट इस दो पंक्तियों:

app:showAsAction="ifRoom" 
    app:actionViewClass="android.widget.ProgressBar" 
0

आप इस तरह अपने मेनू आइटम लाने के लिए कोशिश की?

MenuItem item = getToolbar().getMenu().findItem(Menu.FIRST); 

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

  • कोई संबंधित समस्या नहीं^_^