Java 为什么我们需要在android中发布视图?
我只是想知道,当我们使用findviewbyd()方法初始化视图时,为什么我们实际上在强制转换视图,我的意思是findviewbyd()方法返回什么,以及为什么我们需要强制转换结果Java 为什么我们需要在android中发布视图?,java,android,Java,Android,我只是想知道,当我们使用findviewbyd()方法初始化视图时,为什么我们实际上在强制转换视图,我的意思是findviewbyd()方法返回什么,以及为什么我们需要强制转换结果 TextView txtview; txtview = (TextView) findViewById(R.id.textViewID); 这种铸造实际上是可选的。请检查此调用是否返回视图,否则返回null 或者,如果使用视图绑定,您甚至不需要使用findViewById注意:您不是在初始化,而是从已创建的带有c
TextView txtview;
txtview = (TextView) findViewById(R.id.textViewID);
这种铸造实际上是可选的。请检查此调用是否返回视图,否则返回null
或者,如果使用视图绑定,您甚至不需要使用
findViewById
注意:您不是在初始化,而是从已创建的带有child的视图对象分配到那里
在过去,该方法的签名是
public View findViewById(@ResId int id)
从视图向下转换到任何子类型(TextView、EditText、ImageView等)是必要的,旧文章仍然使用这种方法
现在,签名是通用的,如下所示:
public <T extends View> T findViewById(@ResId int id)
T的值是赋值左侧的TextView
还考虑以下方法签名:
void x(TextView t, ImageView i)
调用此函数时,您可以推断T,结果是使用Textview和ImageView(而不是超级类视图)调用的方法:
x(view.findViewById(R.id.tv_x), view.findViewById(R.id.iv_x))
虽然此任务需要向下广播:
View v = view.findViewById(R.id.tv_x);
//v.text = "x" HERE we don't know the type was not infered to TextView
((TextView) v).text = "x"; //unsafe downcasting necessary
Ps:T的推断类型在视图下方不安全
View v = view.findViewById(R.id.tv_x);
//v.text = "x" HERE we don't know the type was not infered to TextView
((TextView) v).text = "x"; //unsafe downcasting necessary