我正在进行Head First Android开发,我有点困惑 这种方法 - > findViewById(int id)
我在文件中有以下按钮" activity_find_beer.xml" :
<Button
android:id="@+id/find_beer"
android:text="@string/find_beer"
android:onClick="onClickFindBeer" />
以及来自FindBeerActivity.java类的以下代码,该代码将用户选择啤酒并在文本视图中显示相同的内容。
public class FindBeerActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_find_beer);
}
//Call when the button gets clicked
public void onClickFindBeer(View view) {
//Get a reference to the TextView
TextView brands = (TextView) findViewById(R.id.brands);
//Get a reference to the Spinner
Spinner color = (Spinner) findViewById(R.id.color);
//Get the selected item in the Spinner
String beerType = String.valueOf(color.getSelectedItem());
//Display the selected item
brands.setText(beerType);
}
}
我的问题是onClickFindBeer(View视图)采用View类型的方法
对象作为参数,但在我刚才提到的xml中
android:onClick="onClickFindBeer"
以及用户点击时
按钮,onClickFindBeer方法被调用...谁传递的对象
类型查看onClickFindBeer(视图)...是它的东西
隐含的?
其次,在developer.android.com我看到了这个方法 findViewById(int id)都在活动类中( https://developer.android.com/reference/android/app/Activity.html )以及 View类 https://developer.android.com/reference/android/view/View.html ......我不清楚哪个班级(活动或观点) 当我调用findViewById()时调用findViewById(int id)方法 来自onClickFindBeer(查看视图){}。
如果有人能够对此有所了解,那将是非常有必要的。
问候。
答案 0 :(得分:5)
View
参数,因为它是在Button
类的超类中实现的(它是public class Button extends TextView
。)。您添加到XML的视图实际上是java类。将属性设置为此类XML项时,会相应地从特定的Java类构造对象。 onClick
类的View
方法为onClick(View v)
。通过设置XML,您只需要让Button类查找输入的方法,但其签名始终以View作为参数,这是指单击的视图。findViewById
。但是Actyvity类实现它来搜索setContentView()
方法分配给它的视图中的项目。答案 1 :(得分:2)
活动在这里调用findViewById()。您可以在按住Ctrl的同时单击findViewByID来查看方法声明。对于视图,您必须使用视图调用它。例如,
view.findViewById();
答案 2 :(得分:1)
2
据我所知,主要区别在于,当您使用活动中的OnClickListener
时,它与诸如Textview,Button
find_beer.setOnClickListener
及以下代码在按下someButton时被执行。
使用android:onClick = "onClickFindBeer"
句柄时,直接在视图的活动中单击,无需实现任何界面
答案 3 :(得分:0)
基于上面的示例,android:onClick
方法是被调用的方法,因为在java类中调用onclick
方法时,需要调用onClickListener
。
导致另一个问题。据我所知,它属于视图类,因为它始终引用您设计中的对象。
答案 4 :(得分:0)
您已将方法onClickBeer分配给您的按钮。单击该按钮时,对象(在本例中为按钮)将传递给您为其指定的方法。 Button是一种View对象,因此你有一个更通用的View对象作为参数,但是你可以把它压缩成一个按钮对象。
通过&#34; context&#34;来调用findViewById,这是获取系统资源的一种方式。您要求系统返回一个特定对象,然后您可以使用该对象。值得一读的是上下文。
希望能回答你的一些问题。