2012-01-28 75 views
11

Tôi đang sử dụng máy quay số có số CursorAdapter. Bây giờ khi tạo spinner (động) tôi muốn thiết lập một lựa chọn mặc định khác 0 (0 là mục đầu tiên trong danh sách CursorAdapter)Android Spinner.setSelection() không hoạt động

Vì vậy, tôi có một setter cho công việc đó chỉ được gọi là sau khi đối tượng đã được tạo. Nhưng vì một lý do nào đó, không có vấn đề gì tôi vượt qua trong setter đó, 0 luôn luôn được chuyển đến phương pháp onItemSelected() trong số OnItemSelectedListener của Spinner.

HÃY BAO GIỜ nếu tôi chỉ đợi cho đến khi lựa chọn ban đầu đầu tiên xảy ra và chạy trình thiết lập lại, mọi thứ hoạt động tốt. Vì vậy, để làm cho nó rõ ràng hơn ở đây là những gì tôi nhìn thấy trong debugger:

  • đối tượng (spinner) được tạo ra
  • spinner nghe được gắn
  • setter được điều hành, một số, cho phép nói 4 (các spinner chứa cách hơn 4 lựa chọn) được chuyển đến các phương pháp setSelection()
  • Chờ một chút
  • vỚI DOANH NGHIỆP onItemSelected() được chạy lần đầu tiên, nhưng các vị trí nhất định với phương pháp đó là 0!
  • Chờ một chút THÊM
  • một lần nữa chúng tôi chạy setter
  • lại onItemSelected() đang chạy, thời gian này, các vị trí nhất định là 4 vì nó được cho là!

Hiện đã có dây. Có vẻ như không thể thiết lập spinner đó cho đến khi lựa chọn ban đầu đầu tiên, luôn là 0, được chạy. Vì vậy, tại sao nó là cách nó được và những gì tôi có thể làm gì để thiết lập các lựa chọn ban đầu?

+1

Bạn có thể vui lòng đăng mã được sử dụng khi thiết lập Spinner không? Có vẻ như nó có thể là do bạn có một số mã sai thứ tự –

+0

Câu trả lời này (trên một câu hỏi SO khác) đã làm việc cho tôi: http://stackoverflow.com/a/17370964/1617737 –

Trả lời

30

Hãy thử Spinner#setSelection (int position, boolean animate) với animate = false. Tôi nhớ một lúc trở lại tôi đã có một vấn đề tương tự và điều này đã làm các trick. Việc thực hiện nội bộ dường như khác với sự khác biệt đến từ phần animate.

+5

hoạt động như một sự quyến rũ. – masi

+0

Làm việc cho tôi quá .. nhưng không biết tại sao nó hoạt động khi animate trở thành sự thật .. –

1

Nếu bạn biết mặc định mục spinner chọn, nó có thể được viết như sau:

Spinner sp = (Spinner) findViewById(R.id.spinner); 
sp.setSelection(0); // sets the first item 

onItemselectedlistener được gọi khi bạn thay đổi các lựa chọn mục spinner.

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