2013-05-08 29 views
16

người nói tiếng Anh bản xứ, vì vậy tôi xin lỗi về kỹ năng tiếng Anh xấu của tôi cho các bạn.Tại sao phương pháp onNothingSelected cần thiết trong trình lắng nghe spinner?

Tôi đã nghiên cứu Android từ 5 tuần trước. Tôi đã cố gắng để thực hiện một spinner và cố vấn của tôi hỏi tại sao phương pháp onNothingSelected là cần thiết. Tôi không có gì để nói.

Vì vậy, tại sao tôi cần phương pháp đó ?? Bạn có thể trả lời nó?

Mã sau là máy quay của tôi. Nó làm chính xác những gì tôi dự định.

public class SpinnerViewPractice extends Activity { 
private Spinner spinner; 
private String spinner_value = ""; 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    requestWindowFeature(Window.FEATURE_NO_TITLE); 
    setContentView(R.layout.spinnerviewpractice); 

    spinner = (Spinner)findViewById(R.id.spinner1); 

    String[] str = {"","good", "dislike", "like", "hate", "moderate"}; 
    spinner.setPrompt("Set Text"); 
    ArrayAdapter<String> list = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_dropdown_item, str); 
    spinner.setAdapter(list); 
    spinner.setOnItemSelectedListener(new OnItemSelectedListener() { 

     @Override 
     public void onItemSelected(AdapterView<?> arg0, View arg1, 
       int arg2, long arg3) { 
      TextView tv = (TextView)arg1; 
      spinner_value = tv.getText().toString(); 
      if(spinner_value.length() == 0) 
      { 
       spinner_value = "Nothing";     
      } 
      Toast.makeText(SpinnerViewPractice.this, spinner_value, Toast.LENGTH_SHORT).show(); 
     } 

     @Override 
     public void onNothingSelected(AdapterView<?> arg0) { 
      Toast.makeText(SpinnerViewPractice.this, "NothingSelected", Toast.LENGTH_SHORT).show(); 
     }   
    }); 
} 

}

+0

'onNothingSelected' là phương thức gọi lại được gọi khi lựa chọn biến mất khỏi chế độ xem này. – DroidBender

+0

Theo như tôi thấy bạn cần nó để hiển thị một bánh mì nướng? Vì vậy, bạn thông báo cho người dùng nếu anh ta chọn không có gì. Chỉ cần thử nó, nhận xét ra những dòng mã và hãy xem cách ứng dụng của bạn hoạt động. – sandkasten

Trả lời

4

Từ doc here.

onNothingSelected là một phương thức gọi lại được gọi khi lựa chọn biến mất từ ​​chế độ xem này. Việc lựa chọn có thể biến mất chẳng hạn khi chạm được kích hoạt hoặc khi bộ điều hợp bị trống.

Tôi nghĩ rằng nó trả lời khá nhiều câu hỏi của bạn. Vì vậy, nếu spinner của bạn biến mất vì lý do khác, ngoại trừ việc chọn mục sau đó onNothingSelected sẽ được gọi. Vì vậy, như tên của nó nói với nó là cần thiết để tìm hiểu khi không có gì được chọn

+1

Các tài liệu có vẻ sai, gọi lại không được gọi khi loại bỏ, xem tại đây http://stackoverflow.com/a/3474463/819355 – marmor

+1

Nó chỉ đơn giản là không hành xử theo cách này, mặc dù nó phải. –

6

Như các tài liệu mô tả: Phương pháp

Callback được gọi khi lựa chọn biến mất khỏi tầm nhìn này. Lựa chọn có thể biến mất chẳng hạn khi chạm được kích hoạt hoặc khi bộ điều hợp bị trống.

Điều này có nghĩa là phương pháp được gọi bất cứ khi nào mục hiện được chọn sẽ bị xóa khỏi danh sách các mục khả dụng. Theo tài liệu mô tả, điều này có thể xảy ra trong các trường hợp khác nhau, nhưng nói chung nếu bộ điều hợp được sửa đổi sao cho mục hiện được chọn không còn khả dụng thì phương thức sẽ được gọi.

Phương pháp này có thể được sử dụng để bạn có thể đặt mục nào sẽ được chọn vì mục trước đó không còn có sẵn nữa. Điều này thay vì để cho spinner tự động chọn mục tiếp theo trong danh sách.

+1

Làm thế nào để bạn biết mục nào đã được bỏ chọn, nếu tham số duy nhất là "AdapterView"? Bạn có chắc chắn rằng khi chức năng này được gọi? –

+0

Spinner không thể cho bạn biết mục nào đã được bỏ chọn vì nó không còn tồn tại trong bộ điều hợp của nó nữa. Nếu bạn muốn biết mục nào hoặc chỉ mục nào đã được chọn trước đó, bạn sẽ cần tự mình lưu trữ thông tin đó. – TheIT