2010-11-07 30 views

回答

114

如果出於某種奇怪的原因,你不能使用朝日的建議(使用標籤),我的建議是以下幾點:

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

它不適用於ListView。而且,我必須創建另一個擴展ListView的自定義CustomListView,以便我可以使用(查看instanceof CustomListView)。當它是ListView時,有什麼方法可以知道類型嗎?謝謝。 – mabeiyi 2013-06-21 17:23:19

+4

@mabeiyi如果'view instanceof ListView'爲'false',則表示您的視圖不是'ListView'。 – Felix 2013-06-27 07:51:10

+0

@Felix - 實際上如果你有一個ListView並且你設置了「singleChoice」,那麼它將返回一個類名「android.widget.CheckedTextView」。這只是咬我一口。這是在封面下面。 :( – PAntoine 2017-07-21 09:31:10

12

我嘗試以下方法和它的工作:

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

我正在使用TextView來設置微調器的樣式(鏈接在這個例子中:http://developer.android.com/resources/tutorials/views/hello-spinner.html)我也使用onItemSelected事件的方法,這個事件一直持續觸發,我沒有意識到,使用上面的方法 - v.getClass()。getName() - 我可以確定視圖被傳入事件是我用於樣式的TextView。 – jwatts1980 2011-11-11 17:33:50

8

對於其他人誰檢查這個問題,在某些情況下instanceof不工作(我不知道爲什麼!),例如,如果你想檢查視圖類型是ImageViewImageButton(我測試這種情況) ,它得到它們相同,所以你掃描使用這種方式:

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