【发布时间】:2017-10-25 07:17:06
【问题描述】:
所以我有课:
public class NetworkIcon extends ImageView {
public NetworkIcon (Context c){
super(c);
}
}
然后我有:
NitroCooledTowerRack = (NetworkIcon)(ImageView)findViewById(R.id.imageView1);
看起来完全多余,对吧?除非我没有在其中放置“(ImageView)”,否则 Android Studio 似乎会将其视为警告(不是错误,它仍然会生成)。
所以我问,这是一个非常糟糕的做法吗?还是我应该忽略它?
【问题讨论】:
-
警告是什么?
-
"意外投射:布局标签是 imageView"
-
是的,如果你运行它,你会得到一个
ClassCastException。如果你想在你的布局中自定义View,你需要使用一个标签来指定它的确切类:例如,<com.mycompany.myapp.NetworkIcon>。您还需要在该类中至少再添加一个构造函数。 -
感谢您的回复。 “再一个构造函数”是什么意思?我也可以“发明”xml标签吗?
-
要允许从布局 XML 进行膨胀,您需要实现一个构造函数,该构造函数采用
Context和AttributeSet,如 here 所示。你并没有真正“发明”它。LayoutInflater会将标签名称读取为字符串,然后尝试从中实例化类(如果可以)。如果找不到匹配的类,则会抛出异常。