2011-12-13 14 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がSpinnerドロップダウンアイテムではなく、actionBarアイテムのインデックスを与えると考えます。その場合、ドロップダウン内で選択した項目のインデックスをどのように設定するのですか?

+0

あなたは単にその方法をテストしようとしましたか?たとえば、3つの要素を持つスピナーを作成し、条件を使用せずに2番目の要素をアクティブにします。それは私のためにうまく動作します。 [私の例](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

彼はSpinnerではなくActionBar(Honeycombから)について語っています:-) – Bourbon

+0

'models'の代わりに' spinnervalues'を使用しましたか? –

関連する問題