当您使用findViewById时,调用此方法的对象是什么?

时间:2015-09-23 16:46:18

标签: java android

我在Android Studio上为Android设备编程。

据我所知,当我在MainActivity.java中声明并分配这样的Button时:

mTrueButton = (Button) findViewById(R.id.true_button);

编译器会自动替换它:

mTrueButton = (Button) com.testapp.mytestapp.MainActivity.findViewById(R.id.true_button);

但是如果我实际输入第二个语句,我会收到一条关于非静态方法的警告,不能从静态上下文中引用。

我不理解什么?

5 个答案:

答案 0 :(得分:1)

请查看其签名:公开查看findViewById(int id)

因为它不是静态的,你应该从实例化的类中调用它,这就是你得到的消息的原因。

要回答您的问题,该方法是Activity的一部分。最后,您可以在Activity的实例上调用它。

在您的情况下,您位于Activity实例中,因此您可以使用关键字 this 来引用此实例。

答案 1 :(得分:0)

我认为使用View.findViewById()或Activity.findViewById()检索它。
View
Activity

答案 2 :(得分:0)

无法从静态上下文引用“非静态方法”的解释:

'com.testapp.mytestapp.MainActivity'是java类的名称,更准确地说是一种Activity的名称。因此它被解释为'静态',类似于'java.lang.Math'。

如果要引用MainActivity实例,则必须编写“MainActivity.this”。如果你想从内部类(可能是一个OnClickListener)引用Activity,这很有用,但在你的情况下,它默认地假设你想从实例化的Activity的上下文中调用'findViewById()'。所以你可以省略它。

答案 3 :(得分:0)

在MainActivity中,您尚未导入R.java文件 所以它充分参考 导入包的R.java(你的项目不是android.R)将解决你的问题。

答案 4 :(得分:-1)

调用的方法是getWindow().findViewById(id);。要在活动中调用此方法,首先必须使用setContentView(view)设置其视图。或者你可以自己给视图充气,并在你膨胀的视图上调用方法findViewById()。