Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/195.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么我们需要在android中发布视图?_Java_Android - Fatal编程技术网

Java 为什么我们需要在android中发布视图?

Java 为什么我们需要在android中发布视图?,java,android,Java,Android,我只是想知道,当我们使用findviewbyd()方法初始化视图时,为什么我们实际上在强制转换视图,我的意思是findviewbyd()方法返回什么,以及为什么我们需要强制转换结果 TextView txtview; txtview = (TextView) findViewById(R.id.textViewID); 这种铸造实际上是可选的。请检查此调用是否返回视图,否则返回null 或者,如果使用视图绑定,您甚至不需要使用findViewById注意:您不是在初始化,而是从已创建的带有c

我只是想知道,当我们使用findviewbyd()方法初始化视图时,为什么我们实际上在强制转换视图,我的意思是findviewbyd()方法返回什么,以及为什么我们需要强制转换结果

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