2011-12-13 6 views
17

Tôi đang cố gắng để thiết lập các chỉ số của mặt hàng đó mà cần phải được lựa chọn trong spinner theo mặc định, nhưng nó luôn luôn mặc định là 0 (mục 1)ActionBar Dropdown Spinner mặc định mục đến mục đầu tiên

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); 
} 

Ở trên nếu khối được gọi là luôn luôn. Ngay cả sau khi thiết lập chỉ số 2, lần sau tôi kiểm tra nó trả về 0.

Chỉnh sửa: Tôi nghi ngờ getSelectedNavigationIndex cung cấp chỉ mục hành độngBar item thay vì mục Spinner thả xuống. Nếu trường hợp đó xảy ra, phương thức nào đặt chỉ mục của mục đã chọn trong trình đơn thả xuống?

+0

Bạn đã thử thử phương pháp đó chưa? Ví dụ, tạo spinner với ba phần tử và kích hoạt phần tử thứ hai mà không sử dụng bất kỳ điều kiện nào. Việc này ổn với tôi. Hãy xem [ví dụ của tôi] (http://stackoverflow.com/questions/9039045/how-to-set-active-item-in-the-action-bar-drop-down-navigation/9046460#comment11641511_9046460). – Roman

+1

Ngoài ra, hãy thử thiết lập bộ điều hợp của bạn trước khi nhận/thiết lập navigationIndex, tức là actionBar.setListNavigationCallbacks (adapter, this); – brk3

Trả lời

34

Đảm bảo bạn gọi phương thức setListNavigationCallbacks trước khi thay đổi phần tử đã chọn. Tôi không thể nhìn thấy nó trong ví dụ của bạn, vì vậy tôi nghĩ rằng đó là vấn đề.

Dưới đây là một ví dụ:

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

Nó hoạt động trong ứng dụng của tôi mà không cần bất kỳ vấn đề.

1

Bạn đã thử sử dụng shared prefences để lưu giá trị của spinner đã chọn. Tôi đã sử dụng mã này để lưu các lựa chọn cho người dùng với sở thích chia sẻ nên thời gian sau, họ mở ứng dụng spinner đã được thiết lập với giá trị cuối cùng họ đã chọn:

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); 
} 

Sau đó, lấy Util:

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

Tôi thay đổi mã một chút để nó có thể không được 100% ngay nhưng có thể cung cấp cho bạn một ý tưởng.

+1

Anh ấy nói về ActionBar (từ Honeycomb), không phải Spinner :-) – Bourbon

+0

Ý của bạn là sử dụng 'spinnervalues' thay vì' models'? –