2010-08-19 26 views
7

Các java.lang.RuntimeException là "Đừng gọi setOnClickListener cho một AdapterView.Bạn có thể muốn setOnItemClickListener thay vào đó," nhưng đó không phải là chính xác. Tôi đang sử dụng setOnItemClickListener để làm một số công cụ dựa trên lựa chọn mới, nhưng tôi cũng cần phải làm một số công cụ trước khi người dùng thay đổi lựa chọn. Cụ thể, tôi đang thu thập dữ liệu cho từng lựa chọn cần được lưu vào một tệp trước khi chuyển sang lựa chọn khác, vì lựa chọn khác được liên kết với tập hợp dữ liệu khác nhau. Có cách nào để sử dụng setOnClickListener với một Spinner Android không?Có cách nào để sử dụng setOnClickListener với một Spinner Android không?

spinner.setOnClickListener(new View.OnClickListener() { 
    public void onClick(View v) { 
     // Do some stuff before the user changes the selection 
     ... 

spinner.setOnItemSelectedListener(new OnItemSelectedListener() { 
    @Override 
    public void onItemSelected(AdapterView<?> parent, 
      View view, int pos, long id) { 
      // Do some stuff based onItemSelected 
      ... 
+2

Giải pháp mới (đang hoạt động) có sẵn tại đây: http://stackoverflow.com/a/8520801/406090 – OferR

Trả lời

5

Bạn sẽ phải đặt Trình nghe nhấp chuột ở chế độ xem cơ bản (thường là một TextView có id: android.R.id.text1) của trình quay số. Để thực hiện:

  • Tạo một tùy chỉnh Spinner
  • Trong constructor (với các thuộc tính) tạo ra các spinner bằng cách cung cấp bố trí android.R.layout.simple_spinner_item
  • Thực hiện findViewById (android.R.id .text1) để có được những TextView
  • Bây giờ thiết lập OnClickListener đến TextView
+0

để trình ghi đè mở rộng sẽ được xác định bên trong trình xoay tùy chỉnh? Tôi cũng muốn xác định một onclicklistener trên spinner chính nó trong hoạt động? – Namratha

+0

Tôi đã thử phương pháp được đề xuất bởi bạn-nhấp chuột được đăng ký nhưng menu thả xuống vẫn hoạt động. Làm cách nào để ngăn không cho trình đơn thả xuống hoạt động kể từ khi nhấp vào trình quay tròn, tôi sẽ chuyển sang màn hình khác. – Namratha

+0

Tôi đã làm điều đó với android: clickable = "false" – Namratha

7

Bạn có thể sao chép các sự kiện một onclick sử dụng các sự kiện ontouch

this.spinner=(Spinner)findViewById(R.id.spinner); 
    this.spinner.setClickable(false); 
    this.spinner.setOnTouchListener(new View.OnTouchListener() { 

     @Override 
     public boolean onTouch(View v, MotionEvent event) { 
      Log.v(TAG, "spinner touch"); 

      //replicating a click 
      if(event.getAction() == MotionEvent.ACTION_UP){ 
       v.playSoundEffect(android.view.SoundEffectConstants.CLICK); 
      } 
      return true; 
     } 
    }); 
+0

+1 cho lý tưởng mới – kemdo

+1

@ dcart1234 Bạn phải trả về false nếu không spinner sẽ không mở bật lên .. – Praveen

+0

tại sao bạn gọi spinner.setClickable (false)? – programmer

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