2011-12-08 45 views
5

Android thông thường Spinner sẽ bật lên danh sách các lựa chọn khi được nhấp. Tôi muốn ghi đè lên onClick này. Khi người dùng nhấp vào spinner trong một số trạng thái lỗi nhất định, tôi muốn hiển thị thông báo lỗi thay vì bật lên danh sách các lựa chọn. Hiện tại, tất cả những gì tôi có thể làm là đặt số OnClickListener, nhưng phương thức onClick của nó không cho phép tôi ngăn danh sách các tùy chọn xuất hiện.Cách ghi đè onClick trên Android Spinner?

Trả lời

0

Tôi sẽ cố gắng tạo lớp MySpinnerAdapter, thực hiện SpinnerAdapter. Trong MySpinnerAdapter của bạn, hãy xem phương thức getDropDownView. Tôi tin rằng đó là nơi chế độ xem bật lên được tạo. Bạn có thể kiểm tra trạng thái lỗi của mình và quyết định trả về một chế độ xem khác (mặc dù nó có thể ở một hàm khác -> kiểm tra tài liệu) ...

Dù sao, câu trả lời này không phải là bản sao chép. Chỉ cần cố gắng để nhổ một số ý tưởng mới

public class yourActivity extends Activity 
{ 

    private class MySpinnerAdapter implements SpinnerAdapter 
    { 
     // There are quite a lot of methods you need to implement... 

     @Override 
     public View getDropDownView(int position, View convertView, ViewGroup parent) 
     { 
       // Check your error states here 
       if(<we have some kind of error>) 
        return specialErrorView // you get the idea 

       // return the default view with options 
       return normalView; 
     } 
    } 
} 
4

Mở rộng từ Spinner và ghi đè performClick() như thế này:

@Override 
public boolean performClick() { 
    if(errorOccured) { 
     // show validation message 
     return true; // the event is handled by ourselves 
    } 
    else { 
     return super.performClick(); // show spinner dialog 
    } 
} 

Xem nguồn để biết thêm chi tiết. Hi vọng điêu nay co ich.

+1

tốt hơn và đơn giản hơn – Entreco

5

Thử đặt onTouchListener và trong phương thức onTouch hiển thị cửa sổ bật lên và trả lại true để tiêu thụ sự kiện và ngăn không cho tuyên truyền cho chế độ xem (Spinner trong trường hợp này).

spinner.setOnTouchListener(new View.OnTouchListener() { 
    @Override 
    public boolean onTouch(View v, MotionEvent event) { 
    // display your error popup here 
    return true; 
    } 
}); 

Điều này sẽ dừng "danh sách thả xuống" xuất hiện.

Chỉnh sửa: quên đề cập đến bạn cũng có thể thực hiện kiểm tra trạng thái lỗi theo phương pháp onTouch, vì vậy bạn không hoàn toàn tắt trình xoay vòng.

+1

Nhận xét dưới chỉnh sửa là những gì tôi đã kết thúc. Tối thiểu xâm nhập để có được một số giới hạn kiểm soát đoạn chéo trong các tiểu bang khác nhau. – James