Android有什么需要转换findViewById()的返回?

时间:2017-06-03 07:16:30

标签: java android listview casting

要使用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()的返回值?

3 个答案:

答案 0 :(得分:0)

您需要强制转换findViewById(int id)的结果,因为您没有强制转换ListView对象,而是转换View,其中ListView只是一个规范。

https://stackoverflow.com/a/19752066/2725502

答案 1 :(得分:0)

作为一个观点, findViewById 函数返回一个视图而不是它的子视图,我认为你很困惑返回值和信息来自 getClass findViewById(R.id.mainListView).getClass()的输出是 ListView ,因为视图仍然有它的子视图信息,你可以顺便说一下。但实际上 findViewById 会返回一个View值,所以你必须手动包装它。

答案 2 :(得分:0)

正如@Jon Skeet在评论中提到的,findViewById(int id)方法通常返回view(不是子视图),但是此方法是通用的,如果编译器知道目标类的类型,则可以返回子视图。 ,强制转换是多余的,但如果目标类的类型不受限制,则必须显式强制转换。