Java Android:为什么在这一部分(即MainActivity)中定义小部件会导致错误
如果我定义以下几行Java Android:为什么在这一部分(即MainActivity)中定义小部件会导致错误,java,android,gradle,Java,Android,Gradle,如果我定义以下几行 myText =(TextView)findViewById(R.id.textView); button=(Button)findViewById(R.id.button); 在onCreate中,程序运行平稳,但如果在主活动中执行此操作,则会导致错误 import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.view.View; import a
myText =(TextView)findViewById(R.id.textView);
button=(Button)findViewById(R.id.button);
在onCreate
中,程序运行平稳,但如果在主活动中执行此操作,则会导致错误
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
public class MainActivity extends AppCompatActivity {
myText =(TextView)findViewById(R.id.textView); //error
button=(Button)findViewById(R.id.button);
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if(myText.getVisibility()==View.VISIBLE){
myText.setVisibility(View.INVISIBLE);
}else
{
myText.setVisibility(View.VISIBLE);
}
}
});
}
}
myText =(TextView)findViewById(R.id.textView);
button=(Button)findViewById(R.id.button);
要在setContentView
之后创建onCreate
method/after,否则将获得nullPointerException
。初始化发生在onCreate
方法中 TextView myText =(TextView)findViewById(R.id.textView);
Button button=(Button)findViewById(R.id.button);
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
myText =(TextView)findViewById(R.id.textView); //error
button=(Button)findViewById(R.id.button);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if(myText.getVisibility()==View.VISIBLE){
myText.setVisibility(View.INVISIBLE);
}else
{
myText.setVisibility(View.VISIBLE);
}
}
});
}
}
在onCreate()
中调用
setContentView(R.layout.activity_main);
只有在这一点上,活动才会有布局,而findViewById
才有意义-它现在将递归地在R.layout.activity\u main
中查找具有您要查找的ID的视图
您在onCreate
方法之外编写的代码在类实例化时运行,这对您没有帮助,因为在设置布局之前
试着这样做:
public class MyActivity ... {
private TextView foo;
private Button bar;
@Override protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
foo = (TextView)findViewById(R.id.some_id);
bar = (Button)findViewById(R.id.some_other_id);
// ... can use foo and bar here and during the rest of the activity lifecycle
}
// ...
}
对于活动,findViewById从该活动的内容视图(使用setContentView设置)开始搜索,该活动是从布局资源膨胀的视图层次结构 因此,在onCreate中调用setContentView之前,..findViewById无法工作
Java在类加载时初始化类变量。如果您将“myText”和“button”作为类变量,并使用findViewById进行初始化,那么它将无法工作,因为还没有调用setContentView您正在尝试在将xml加载到activity中之前获取小部件的值。这些值无效,因为它们不是在方法内部完成的。…Write myText=(TextView)findViewById(R.id.TextView)//错误按钮=(按钮)findViewById(R.id.button);在设置内容视图后,在视图已知之前不能使用findViewById()。我已经做了,我需要一个原因为什么会发生这种情况???答案已更新。谢谢大家!!!!!!!!!!如果这个帮助的话,把这个标记为答案。