当我放置" setContentView"在" NumbersClickListners"之上应用程序按预期方式运行。
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
NumbersClickListners numbersClickListners = new NumbersClickListners();
TextView numbers = (TextView) findViewById(R.id.numbers);
numbers.setOnClickListener(numbersClickListners);
}
但是只要" setContentView"放在以" NumbersClickListners"开头的三行之下应用程序崩溃。代码看起来像这样
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
NumbersClickListners numbersClickListners = new NumbersClickListners();
TextView numbers = (TextView) findViewById(R.id.numbers);
numbers.setOnClickListener(numbersClickListners);
setContentView(R.layout.activity_main);
}
我非常不确定这种行为的原因。有人可以帮帮我吗?
答案 0 :(得分:0)
让我们看一下布局的生活。
首先,您必须通过声明XML文件来创建它,您可以在这里以用户友好的方式进行设计,并根据您的需要命名元素。 现在你的布局只是一个文件,Android并不是出于性能原因而真正关心的。
接下来你要做的就是使用你的布局。为此,您的文件需要转换为对象的内部结构,称为ViewGroup和Views。 这个过程称为膨胀。这是系统可以通过调用findViewById()为您找到视图的点。
因此,在第二个片段中,您要求活动为您找到一个不会膨胀的按钮。这导致抛出异常。
一般来说,你想在onCreate中做的第一件事就是调用setContentView()。