2010-07-03 44 views
7

Tôi có chế độ xem với một spinner. Hoạt động này bắt đầu một trọng số khác với cửa sổ bật lên nơi tôi thêm hoặc xóa các giá trị mà phụ huynh hiển thị trong Spinner. Vì vậy, trong onActivityResult() tôi làm mới nội dung của Spinner để nó phản ánh bất kỳ giá trị bổ sung hoặc xóa nào, bằng cách gọi phương thức fillSpinner() của tôi. Các tham số để phương pháp này là giá trị đã chọn trước đó:Làm mới Spinner

private void fillSpinner(String value){ 

    Cursor c = mDbHelper.getAllCategories(); 
    startManagingCursor(c); 
    c.moveToFirst(); 

    String[] from = new String[]{DBAdapter.KEY_CATEGORY};  
    SimpleCursorAdapter scCats = new SimpleCursorAdapter(
     this, android.R.layout.simple_spinner_item,c,from, 
      new int[]{android.R.id.text1}); 
    scCats.setDropDownViewResource(
     android.R.layout.simple_spinner_dropdown_item); 
    category.setAdapter(scCats); 

    if (value != null && value != "") { 
     category.setSelection((int)mDbHelper.categoryIndex(value)); 
    } 
} 

Khi tôi mở Spinner, nó chứa danh sách chính xác (tức là nó đã được làm mới) và giá trị chính xác được chọn. Tuy nhiên, chính điều khiển Spinner (ở trạng thái đóng) của nó không hiển thị giá trị đã chọn, mà là giá trị đầu tiên trong danh sách.

Khi tôi duyệt qua mã trong trình gỡ lỗi, giá trị Spinner là chính xác trước và sau khi tôi gọi setSelection() (và nó luôn được gọi với cùng id chính xác). Tuy nhiên, vì tôi không thể bước ra khỏi sự kiện, khi tôi tiếp tục thực hiện sau một thời gian ngắn giá trị trong các thay đổi Spinner.

Nói cách khác, chuỗi hiển thị của trình xoay vòng được thay đổi và khác với mục đã chọn khi tôi trở về từ hoạt động bật lên của mình.

Bất kỳ ý tưởng nào được đánh giá cao.

Trả lời

1

Vấn đề, tôi nghĩ, là do con trỏ của tôi được tạo lại trên mọi cuộc gọi. Tôi không có một lời giải thích tốt hơn. This post gián tiếp chỉ cho tôi đúng hướng.

Bằng cách giữ con trỏ sau khi tạo nó ban đầu, tôi có thể chỉ cần gọi requery() sau khi thay đổi dữ liệu danh sách, trái ngược với việc chạy qua phương thức trong câu hỏi của tôi. Nó hoạt động tốt ngay bây giờ.

5

Tôi tìm thấy một giải pháp đơn giản cho vấn đề đó: Sử dụng biểu mẫu Spinner.setSelection (vị trí int, Boolean NavigateTo) để Spinner hiển thị đúng mục đã chọn.

Ví dụ: Spin.setSelection (iPos, true);

Chúc may mắn.

+0

Cảm ơn bạn! Đã làm cho tôi. – Yellos

Các vấn đề liên quan