Android Studio java文件获取布局中元素存在的问题 明明声明了按钮变量也获取到了控件ID了,在使用按钮点击监听器的时候也没报错,结果到了Android Studio的模拟机却直接闪崩。问题代码如下
class SignupActivity extends AppCompatActivity {
private Button signup = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
signup = (Button) findViewById(R.id.signup);
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_signup);
signup.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent = new Intent(SignupActivity.this, MainActivity.class);
startActivity(intent);
}
});
}
}
哇,其实原来我的代码比这个多多了,虽然0Errors的提示很让人开心,但闪崩的界面更让人心碎。一点一点的看,一点一点的删除,界面上没有报错,在控制台上给出的错误File error accessing recents directory (directory doesn't exist?).
去百度上查给我的结果是安全权限不够。
一点一点的试错最后能把崩溃的原因归结到按钮监听器的声明上,只要声明监听器就会崩溃反之就不会。我当时就在想那么问题就好解决了嘛,肯定是按钮没有获取到控件ID啊。但仔细回看我发现我真的已经获取到了,而且这里涉及到了AS中一个BUG,就是不管声明的按钮变量是否获取到了控件的值,它在声明按钮监听时鼠标移上后都是给到声明时的值。即如果你一开始声明了Button button = null;
那么即使你获取到了控件中假如id为button1
的值,当你鼠标移动到其元素上时仍然为button = null
。
这个错误真的误导了我很长时间,我一直以为问题是出在别的地方。后来一点一点的删除增加查看崩溃情况后发现。是因为我在获取控件值的时候将代码放在了onCreate
的构造方法之前了,将此句移到后面就解决了,具体原因还没有查,但是这种前后放置就崩溃且不报错的问题确实是很让人头疼的,发出来希望大家引以为戒不要犯我这样的错误,也希望懂原因的大佬能解释一下为什么放在前面就会崩溃。谢谢了。