要使用Android findViewById()
中的XML获取查看,请使用 ListView 。
由于findViewById()
返回父查看对象而不是 ListView 对象这一事实,我们需要转换findViewById()
的返回值
ListView listView =(ListView)findViewById(R.id.listView);
findViewById()
没有投射的输出:
System.out.println(findViewById(R.id.mainListView).getClass()); // class android.widget.ListView
System.out.println(findViewById(R.id.mainListView).getClass().getSimpleName()); // ListView
System.out.println((findViewById(R.id.mainListView) instanceof ListView)); // true
但是,findViewById()确实返回了 ListView 对象,那么为什么需要转换findViewById()
的返回值?
答案 0 :(得分:0)
您需要强制转换findViewById(int id)的结果,因为您没有强制转换ListView对象,而是转换View,其中ListView只是一个规范。
答案 1 :(得分:0)
作为一个观点, findViewById 函数返回一个视图而不是它的子视图,我认为你很困惑返回值和信息来自 getClass 。 findViewById(R.id.mainListView).getClass()的输出是 ListView ,因为视图仍然有它的子视图信息,你可以顺便说一下。但实际上 findViewById 会返回一个View值,所以你必须手动包装它。
答案 2 :(得分:0)
正如@Jon Skeet在评论中提到的,findViewById(int id)方法通常返回view(不是子视图),但是此方法是通用的,如果编译器知道目标类的类型,则可以返回子视图。 ,强制转换是多余的,但如果目标类的类型不受限制,则必须显式强制转换。