我在Android Studio上为Android设备编程。
据我所知,当我在MainActivity.java中声明并分配这样的Button时:
mTrueButton = (Button) findViewById(R.id.true_button);
编译器会自动替换它:
mTrueButton = (Button) com.testapp.mytestapp.MainActivity.findViewById(R.id.true_button);
但是如果我实际输入第二个语句,我会收到一条关于非静态方法的警告,不能从静态上下文中引用。
我不理解什么?
答案 0 :(得分:1)
请查看其签名:公开查看findViewById(int id)
因为它不是静态的,你应该从实例化的类中调用它,这就是你得到的消息的原因。
要回答您的问题,该方法是Activity的一部分。最后,您可以在Activity的实例上调用它。
在您的情况下,您位于Activity实例中,因此您可以使用关键字 this 来引用此实例。
答案 1 :(得分:0)
答案 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()。