关于Android中findViewById(int id)方法的说明

时间:2016-05-26 10:17:09

标签: java android android-activity

我正在进行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);
    }
    }
  1. 我的问题是onClickFindBeer(View视图)采用View类型的方法 对象作为参数,但在我刚才提到的xml中 android:onClick="onClickFindBeer"以及用户点击时 按钮,onClickFindBeer方法被调用...谁传递的对象 类型查看onClickFindBeer(视图)...是它的东西 隐含的?

  2. 其次,在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(查看视图){}。

  3. 如果有人能够对此有所了解,那将是非常有必要的。

    问候。

5 个答案:

答案 0 :(得分:5)

  1. 该方法采用View参数,因为它是在Button类的超类中实现的(它是public class Button extends TextView。)。您添加到XML的视图实际上是java类。将属性设置为此类XML项时,会相应地从特定的Java类构造对象。 onClick类的View方法为onClick(View v)。通过设置XML,您只需要让Button类查找输入的方法,但其签名始终以View作为参数,这是指单击的视图。
  2. 必须在View组上调用
  3. findViewById。但是Actyvity类实现它来搜索setContentView()方法分配给它的视图中的项目。

答案 1 :(得分:2)

  1. 这有点暗示。构建应用程序时,XML文件实际上已转换为Java文件。单击视图时,视图将传递到onClickFindBeer(视图视图)功能。
  2. 活动在这里调用findViewById()。您可以在按住Ctrl的同时单击findViewByID来查看方法声明。对于视图,您必须使用视图调用它。例如,

    view.findViewById();

答案 2 :(得分:1)

  1. 它被称为JAVA Reflection,由android
  2. 使用

    2

    据我所知,主要区别在于,当您使用活动中的OnClickListener时,它与诸如Textview,Button

    之类的部分对象相关联

    find_beer.setOnClickListener及以下代码在按下someButton时被执行。

    使用android:onClick = "onClickFindBeer"句柄时,直接在视图的活动中单击,无需实现任何界面

答案 3 :(得分:0)

基于上面的示例,android:onClick方法是被调用的方法,因为在java类中调用onclick方法时,需要调用onClickListener

导致另一个问题。据我所知,它属于视图类,因为它始终引用您设计中的对象。

答案 4 :(得分:0)

  1. 您已将方法onClickBeer分配给您的按钮。单击该按钮时,对象(在本例中为按钮)将传递给您为其指定的方法。 Button是一种View对象,因此你有一个更通用的View对象作为参数,但是你可以把它压缩成一个按钮对象。

  2. 通过&#34; context&#34;来调用findViewById,这是获取系统资源的一种方式。您要求系统返回一个特定对象,然后您可以使用该对象。值得一读的是上下文。

  3. 希望能回答你的一些问题。