【问题标题】:Android get type of a viewAndroid获取视图类型
【发布时间】:2011-05-06 07:22:04
【问题描述】:

我该怎么做?

某事:

final View view=FLall.getChildAt(i);

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

【问题讨论】:

    标签: java android gettype


    【解决方案1】:

    您可以为此目的使用标签:请参阅http://developer.android.com/reference/android/view/View.html 的 set/getTag 方法

    【讨论】:

      【解决方案2】:

      如果由于某种奇怪的原因,您不能使用Asahi的建议(使用标签),我的建议如下:

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

      【讨论】:

      • 它不适用于 ListView。而且,我必须创建另一个扩展 ListView 的自定义 CustomListView,以便我可以使用(查看 CustomListView 的实例)。有什么方法可以知道 ListView 的类型吗?谢谢。
      • @mabeiyi 如果view instanceof ListViewfalse,则表示您的视图不是ListView
      • @Felix - 实际上,如果您有一个 ListView 并且您设置了“singleChoice”,那么它将返回一个“android.widget.CheckedTextView”的类名。这只是咬我。这是在幕后完成的。 :(
      【解决方案3】:

      我尝试了以下方法并且成功了:

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

      【讨论】:

      • 我正在使用 TextView 设置微调器的样式(此示例中的链接:developer.android.com/resources/tutorials/views/…)。我还在使用微调器的 onItemSelected 事件方法。这个事件不断地以我不认识的观点触发。使用上面的方法——v.getClass().getName()——我能够确定传递给事件的 View 是我用于样式的 TextView。
      【解决方案4】:

      对于检查此问题的其他人,在某些情况下 instanceof 不起作用(我不知道为什么!),例如,如果您想检查视图类型是 ImageView 还是 ImageButton(我测试了这个情况),它使它们相同,因此您可以使用这种方式进行扫描:

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

      【讨论】:

        【解决方案5】:

        我正在将此解决方案用于 KOTLIN 代码,因此放弃 Arash 的解决方案:

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

        使用它对我不起作用,但将其调整为:

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

        为我工作!

        【讨论】:

          【解决方案6】:

          在 Kotlin 中,您可以使用 "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")
          }
          

          【讨论】:

            【解决方案7】:

            在 Android Xamarin 中,这是 Android 获取视图类型并与控制器类型进行比较的方式。

            var view = FindViewById<TextView>(Resource.Id.emailText);
            
            if (typeof(TextView).IsInstanceOfType(view))
            {
                var textView = (TextView)view;
            }
            

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2022-01-20
              • 1970-01-01
              • 2020-11-08
              • 1970-01-01
              • 1970-01-01
              • 2020-04-30
              • 2021-12-04
              • 2013-07-18
              相关资源
              最近更新 更多