2012-10-02 12 views
5

Tôi đang cố gắng đặt một số mục trong GridView của mình từ có thể nhấp đến không thể nhấp. Vì vậy, tôi có một GridView với một adapter tùy chỉnh trên nó và một onitemclicklistener. Trong bộ chuyển đổi Tuỳ chỉnh của tôi, tôi cố gắng làm như sau trong phương pháp getView của tôi: (kể từ khi tôi đọc về gọi isEnabled ..)Đặt một số mục trong chế độ xem lưới không thể nhấp được

if(int value < 5) { //item can not be clickable 
isEnabled(position); 
} else { 
//other things happen, but isEnabled is not called here in any case 
} 
//...... 
@Override 
    public boolean isEnabled(int position) { 

      return false; 

    } 

Điều kỳ lạ là, bây giờ tất cả các mục là không thể nhấp, mặc dù có những mặt hàng mà giá trị là> 5 .. Tôi không biết điều gì đang gây ra điều này ...

+0

Nếu nó là 'isEnabled (giá trị)' thay vì 'isEnabled (position)'? – DeeV

Trả lời

9

Vì vậy, những gì bạn đang thực sự làm ở đây là ghi đè phương pháp được xây dựng trong isEnabled(int) và yêu cầu nó luôn trả về false. Điều này khiến bộ điều hợp của bạn luôn báo cho lưới của bạn biết rằng các ô của nó không được bật.

Những gì bạn đang thực sự tìm kiếm là một cái gì đó giống như

public boolean isEnabled(int position) 
{ 
    if(position < 5) 
     return false; 
    else 
     return true; 
} 

Mấu chốt ở đây là bạn không phải là người gọi isEnabled. Bạn đang ghi đè isEnabledGridView đang tự động gọi số đó để xác định ô nào có thể nhấp và không nên nhấp vào ô nào. Vì vậy, bạn sẽ không bao giờ thực sự gọi isEnabled ở bất kỳ đâu trong mã của bạn cho mục đích này.

+0

Được rồi, tôi hiểu. Nghe có vẻ rõ ràng! Cảm ơn! –