我们应该如何在Android中设置小部件值?

时间:2016-07-27 18:17:45

标签: android android-widget

我正在查看我的代码,并且我意识到至少有3种方法可以在代码中获取小部件的引用:

第一个(在onCreate之前):

private TextView textView= (TextView) findViewById(R.id.textView);
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main_layout);
    }

第二个(在onCreate中):

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main_layout);

        final TextView textView= (TextView) findViewById(R.id.textView);
     }

第三个(在onCreate中创建和设置):

private TextView textView;
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.main_layout);

            textView= (TextView) findViewById(R.id.textView);
         }

这三种方法有什么区别?我什么时候应该使用它们?

3 个答案:

答案 0 :(得分:1)

您必须先致电setContentView()之前致电findViewById(),因此,第一种方法将始终为您null。对于final关键字,第2个和第3个相同,但这是Java feature,而不是Android的。

答案 1 :(得分:0)

第一个不保证您的窗口小部件实际被实例化,它不在onCreate中。

第二个将被实例化,但它的值不能改变,因为它成为最终的常量。

第三,它是一个全局变量,将在onCreate中实例化,您可以在代码的任何其他部分使用它。

答案 2 :(得分:0)

如果您需要致电findViewById(),则应在setContentView之后的任何地方拨打电话。不是在你的第一个选项之前。您的第三个选项创建一个实例变量,只有在整个课程中访问很多文本视图时才使用它,否则只需在需要的地方调用findViewById