为什么setContentView的位置更改会改变应用程序的行为?

时间:2017-07-12 17:41:30

标签: java android

当我放置" 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);

    }

我非常不确定这种行为的原因。有人可以帮帮我吗?

1 个答案:

答案 0 :(得分:0)

让我们看一下布局的生活。

首先,您必须通过声明XML文件来创建它,您可以在这里以用户友好的方式进行设计,并根据您的需要命名元素。 现在你的布局只是一个文件,Android并不是出于性能原因而真正关心的。

接下来你要做的就是使用你的布局。为此,您的文件需要转换为对象的内部结构,称为ViewGroup和Views。 这个过程称为膨胀。这是系统可以通过调用findViewById()为您找到视图的点。

因此,在第二个片段中,您要求活动为您找到一个不会膨胀的按钮。这导致抛出异常。

一般来说,你想在onCreate中做的第一件事就是调用setContentView()。