2010-11-07 12 views

Odpowiedz

114

Jeśli z jakiegoś dziwnego powodu, nie można używać sugestię Asahi „s (przy użyciu tagów), moja propozycja będzie następujący:

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

To nie działa dla ListView. I, muszę stworzyć inny niestandardowy CustomListView, który rozszerza ListView, dzięki czemu mogę go używać (zobacz instancję customListView). Czy istnieje jakiś sposób poznać typ, gdy jest ListView? Dzięki. – mabeiyi

+4

@mabeiyi jeśli 'zobacz instanceof ListView' jest' false', to znaczy, że twój widok nie jest 'ListView'. – Felix

+0

@Felix - właściwie jeśli masz ListView i ustawiłeś "singleChoice", to zwróci nazwę klasy "android.widget.CheckedTextView". To mnie właśnie ugryzło. Robi to pod osłonami. :( – PAntoine

12

i spróbuj wykonać następujące czynności i to działało:

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

Używam TextView do ustawienia stylu dla spinnera (link w tym przykładzie: http://developer.android.com/resources/tutorials/views/hello-spinner.html). Używam również onItemSelected metoda zdarzenia dla spinnera Zdarzenie ciągle wyzwalało się z widoku, którego nie rozpoznałem, używając powyższej metody - v.getClass(). getName() - udało mi się ustalić, że widok jest przekazywany do zdarzenia jest TextView, którego używam dla stylów. – jwatts1980

8

dla innych, którzy sprawdzają to pytanie, w niektórych przypadkach instanceof nie działa (nie wiem dlaczego!), Na przykład, jeśli chcesz sprawdzić, czy typ widoku jest ImageView lub ImageButton (i przetestowane tej sytuacji) , robi się to samo, więc skanujesz w ten sposób:

//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; 
    }