Tôi có một Android Spinner
và tôi muốn nhận lại cuộc gọi khi người dùng chọn thứ gì đó từ hộp thoại bật lên của nó. Có vẻ như setOnItemClickListener()
hoặc setOnItemSelectedListener()
sẽ là phương pháp phù hợp để sử dụng nhưng không được gọi khi tôi chọn một trong các mục trong trình quay tròn.Cách nhận lại cuộc gọi khi hộp thoại bật lên Spinner bị loại bỏ?
Có cách nào đúng để thực hiện việc này không?
CẬP NHẬT
mỗi gợi ý commonsware, tôi đã làm những điều sau đây, nhưng phương pháp onItemSelected()
của tôi là không bao giờ được gọi là:
final Spinner spinner = (Spinner) findViewById(R.id.spinner);
spinner.setAdapter(new ArrayAdapter<SettingValue>(getContext(), android.R.layout.simple_list_item_1, android.R.id.text1, setting.getSettingValues()));
spinner.setOnItemSelectedListener(new OnItemSelectedListener() {
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
Log.d("BOOGA");
final SettingValue settingValue = (SettingValue)parent.getSelectedItem();
final Editor edit = getContext().getSharedPreferences(PREFS_CONTEXT_NAME, Context.MODE_PRIVATE).edit();
edit.putString(setting.name(), settingValue.name());
edit.commit();
}
public void onNothingSelected(AdapterView<?> parent) {
// do nothing
}
});
Cảm ơn mã đó, phần mềm commonsware. Tôi đã thử nó và nó không làm việc cho tôi. Trình nghe 'onItemSelected()' không bao giờ được gọi vì một lý do nào đó. Xem cập nhật của tôi ở trên. Bất kỳ ý tưởng? – emmby
Bạn không sử dụng mã của tôi cả. Nếu bạn so sánh hai, bạn sẽ thấy rằng bạn không sử dụng tài nguyên Spinner trong tham số thứ hai cho hàm tạo ArrayAdapter của bạn và bạn cũng không cung cấp tài nguyên thả xuống cho bộ điều hợp đó. Sửa hai thứ đó và xem điều đó có làm rõ vấn đề của bạn hay không. Nếu không, hãy tìm những khác biệt khác. – CommonsWare
Đây là mã rất hữu ích nhưng nó không bao gồm trường hợp người dùng 'hủy bỏ' spinner (tức là chạm bên ngoài spinner để đóng nó). Mã Spinner gốc có lỗ hổng lớn - không có sự kiện nghe hoặc gọi lại để mở hoặc đóng cửa sổ bật lên hoặc hộp thoại. Ví dụ, thay đổi tiêu đề spinner dựa trên popup mở hoặc đóng (có thể thay đổi một mũi tên hoặc một cái gì đó) có vẻ không thể. – Batdude