2011-12-13 20 views
17

我正在嘗試設置需要在默認情況下,微調要選擇的項目的索引,但它總是默認爲0(第1項)動作條下拉微調項默認爲第一項

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.

編輯:我懷疑getSelectedNavigationIndex給出了actionBar項目的索引,而不是微調下拉項目。如果是這樣的話,什麼方法在下拉菜單中設置選定項目的索引?

+0

您是否嘗試過簡單測試該方法?例如,使用三個元素創建微調器,並在不使用任何條件的情況下激活第二個微調器。這對我來說可以。看看[我的例子](http://stackoverflow.com/questions/9039045/how-to-set-active-item-in-the-action-bar-drop-down-navigation/9046460#comment11641511_9046460)。 – Roman

+1

另外,在獲取/設置navigationIndex之前,嘗試設置您的適配器,即actionBar.setListNavigationCallbacks(adapter,this); – 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

他說的是ActionBar(來自Honeycomb),而不是微調:-) – Bourbon

+0

你是不是想用'spinnervalues'來代替'models'? –

相關問題