2010-11-07 30 views

Trả lời

114

Nếu vì một lý do kỳ lạ, bạn không thể sử dụng gợi ý Asahi 's (sử dụng thẻ), đề xuất của tôi sẽ như sau:

if (view instanceof ImageView) { 
    ImageView imageView = (ImageView) view; 
    // do what you want with imageView 
} 
else if (view instanceof TextView) { 
    TextView textView = (TextView) view; 
    // do what you want with textView 
} 
else if ... 
+0

Nó không hoạt động cho ListView. Và, tôi phải tạo một CustomListView tùy chỉnh khác mở rộng ListView, để tôi có thể sử dụng (xem instanceof CustomListView). Có cách nào để biết loại khi nó là ListView? Cảm ơn. – mabeiyi

+4

@mabeiyi nếu 'xem instanceof ListView' là' false', có nghĩa là chế độ xem của bạn không phải là 'ListView'. – Felix

+0

@Felix - thực sự nếu bạn có một ListView và bạn đã đặt "singleChoice" thì nó sẽ trả về tên lớp là "android.widget.CheckedTextView". Điều này đã chỉ chút tôi. Điều này thực hiện điều này dưới sự bảo hiểm. :( – PAntoine

12

Tôi thử làm như sau và làm việc:

View view=FLall.getChildAt(i); 
Log.i("ViewName", view.getClass().getName()); 
+0

Tôi đang sử dụng TextView để đặt kiểu cho một spinner (liên kết trong ví dụ này: http://developer.android.com/resources/tutorials/views/hello-spinner.html) .Tôi cũng đang sử dụng onItemSelected sự kiện tiếp tục kích hoạt với một cái nhìn mà tôi đã không nhận ra.Việc sử dụng phương pháp của bạn ở trên - v.getClass(). getName() - Tôi đã có thể xác định rằng View được chuyển vào sự kiện là TextView tôi đang sử dụng cho các kiểu. – jwatts1980

8

Đối Những người khác kiểm tra Câu hỏi này, trong một số trường hợp instanceof không hoạt động (Tôi không biết tại sao!), Ví dụ nếu muốn của bạn để kiểm tra xem chế độ xem loại là ImageView hoặc ImageButton (i kiểm tra tình trạng này) , nó nhận được chúng giống nhau, vì vậy bạn quét theo cách này:

//v is your View 
    if (v.getClass().getName().equalsIgnoreCase("android.widget.ImageView")) { 
     Log.e("imgview", v.toString()); 
     imgview = (ImageView) v; 
    } else if (v.getClass().getName().equalsIgnoreCase("android.widget.ImageButton")) { 
     Log.e("imgbtn", v.toString()); 
     imgbtn = (ImageButton) v; 
    } 
Các vấn đề liên quan