Android get type of a view

JavaAndroidGettype

Java Problem Overview


How can i do this?

something:

final View view=FLall.getChildAt(i);

if (view.getType()==ImageView) {
...
}

Java Solutions


Solution 1 - Java

If, for some strange reason, you can't use Asahi's suggestion (using tags), my proposition would be the following:

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 ...

Solution 2 - Java

I try the following and it worked:

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

Solution 3 - Java

For Others who check this Question,in some cases instanceof does not work(I do not know why!),for example if your want to check if view type is ImageView or ImageButton(i tested this situation) , it get them the same, so you scan use this way :

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

Solution 4 - Java

You can use tag for that purpose:see set/getTag methods at http://developer.android.com/reference/android/view/View.html

Solution 5 - Java

I am using this solution for KOTLIN code, so going off of Arash's solution:

if(v.javaClass.name.equals("android.widget.ImageView", ignoreCase = true)) ...

using this didn't work for me, but tweaking it to:

if(v.javaClass.name.contains("ImageView", ignoreCase = true)) ...

worked for me!

Solution 6 - Java

In Kotlin you can check this by using "is":

val view = findViewById<View>(R.id.a_view)

if (view is ImageView) {
    print("This is a ImageView")
} else {
    print("This is not a ImageView")
}

Solution 7 - Java

In Android Xamarin, This is how Android get type of a view and compare with controller type.

var view = FindViewById<TextView>(Resource.Id.emailText);

if (typeof(TextView).IsInstanceOfType(view))
{
    var textView = (TextView)view;
}

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionlacasView Question on Stackoverflow
Solution 1 - JavaFelixView Answer on Stackoverflow
Solution 2 - JavarealjinView Answer on Stackoverflow
Solution 3 - JavaArashView Answer on Stackoverflow
Solution 4 - JavaAsahiView Answer on Stackoverflow
Solution 5 - JavaMic RamosView Answer on Stackoverflow
Solution 6 - JavaTob237View Answer on Stackoverflow
Solution 7 - JavaDilanka FernandoView Answer on Stackoverflow