2011-12-13 17 views
17

मैं आइटम डिफ़ॉल्ट रूप से स्पिनर में चयनित करने की आवश्यकता है कि के सूचकांक स्थापित करने के लिए कोशिश कर रहा हूँ करने के लिए चूक, लेकिन यह हमेशा चूक 0 (1 आइटम) कोActionBar ड्रापडाउन स्पिनर आइटम पहले आइटम

actionBar.setDisplayShowTitleEnabled(false); 
actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_LIST); 

SpinnerAdapter spinnerAdapter = 
      new ArrayAdapter<String>(activity, android.R.layout.simple_spinner_dropdown_item, 
        names); 
int selectedIndex = actionBar.getSelectedNavigationIndex(); 
if (selectedIndex != targetIndex) { 
    actionBar.setSelectedNavigationItem(targetIndex); 
} 

ऊपर अगर ब्लॉक हमेशा कहा जाता है। इंडेक्स 2 सेट करने के बाद भी, अगली बार जब मैं इसे चेक करता हूं 0

संपादित करें: मुझे संदेह है कि चयन किया गया हैविगेशन इंडेक्स स्पिनर ड्रॉपडाउन आइटम की बजाय कार्रवाई आइटम की अनुक्रमणिका देता है। यदि ऐसा है, तो कौन सी विधि ड्रॉपडाउन के अंदर चयनित आइटम की अनुक्रमणिका सेट करती है?

+0

क्या आपने बस उस विधि का परीक्षण करने की कोशिश की है? उदाहरण के लिए, तीन तत्वों के साथ स्पिनर बनाएं और किसी भी स्थिति का उपयोग किए बिना दूसरे को सक्रिय करें। यह मेरे लिए ठीक काम करता है। [मेरा उदाहरण] पर एक नज़र डालें (http://stackoverflow.com/questions/9039045/how-to-set-active-item-in-the-action-bar-drop-down-navigation/9046460#comment11641511_9046460)। – Roman

+1

इसके अलावा, नेविगेशन इंडेक्स प्राप्त करने/सेट करने से पहले अपने एडाप्टर को सेट करने का प्रयास करें, यानी actionBar.setListNavigationCallbacks (एडाप्टर, यह); – brk3

उत्तर

34

सुनिश्चित करें कि आप चयनित तत्व को बदलने से पहले setListNavigationCallbacks विधि पर कॉल करें। मैं इसे आपके उदाहरण में नहीं देख सकता, इसलिए मुझे लगता है कि यह समस्या है।

actionBar = getActionBar(); 
actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_LIST); 
actionBar.setListNavigationCallbacks(adapter, this); 
actionBar.setSelectedNavigationItem(position); 

यह किसी भी समस्याओं के बिना मेरे एप्लिकेशन में काम करता है:

यहाँ एक उदाहरण है।

1

क्या आपने चयनित स्पिनर के मूल्य को बचाने के लिए shared prefences का उपयोग करने का प्रयास किया है।

Spinner Spinner = (Spinner) findViewById(R.id.Spinner); 
String[] spinnervalues = getSpinnervalues(); 
ArrayAdapter<CharSequence> spinnerAdapter = new ArrayAdapter<CharSequence>(this, android.R.layout.simple_spinner_item, makes); 
spinnerAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 
Spinner.setAdapter(spinnerAdapter); 
int position = Utils.getIndex(getSpinnerval(), makes); 

Spinner.setOnItemSelectedListener(new OnItemSelectedListener() { 

    public void onItemSelected(AdapterView<?> parentView, View selectedItemView, int position, long id) { 
     String selected = (String) parentView.getSelectedItem(); 
     Spinner Spinner = (Spinner) findViewById(R.id.Spinner); 
     String[] spinnervalues = Filter.this.getSpinnerval(selected); 
     ArrayAdapter<CharSequence> adapter = new ArrayAdapter<CharSequence>(Filter.this, android.R.layout.simple_spinner_item, models); 
     spinnerAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 
     Spinner.setAdapter(adapter); 
    } 

    public void onNothingSelected(AdapterView<?> parentView) {} 
}); 

Spinner.setSelection(makeposition, true); 
int position = Utils.getIndex(getSpinnerval()); 
if (position >= 0) { 
    Spinner Spinner = (Spinner) findViewById(R.id.Spinner); 
    Spinner.setSelection(position, true); 
} 

util मिलता तब:

public String getSpinnerval() { 
    return getSharedPreferences().getString("val", ""); 
} 

मैं साझा वरीयताओं इसलिए अगली बार जब वे एप्लिकेशन स्पिनर अंतिम मान वे चुना है स्थापित किया गया था खोला के साथ उपयोगकर्ताओं को चयन को बचाने के लिए इस कोड का इस्तेमाल किया मैंने कोड को थोड़ा बदल दिया है, इसलिए यह 100% सही नहीं हो सकता है लेकिन आपको एक विचार दे सकता है।

+1

वह एक्शनबार (हनीकॉम से) के बारे में बात करता है, स्पिनर नहीं :-) – Bourbon

+0

क्या आप 'मॉडलों' के बजाय 'स्पिनर्वेल्यू' का उपयोग करना चाहते थे? –

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