在onCreate之外声明变量 - Android

时间:2014-09-02 22:00:31

标签: java android

当我在onCreate方法之外声明TextView时,我的应用程序停止了,我这样做是因为我需要从其他方法访问TextView变量。我会感激任何帮助。

public class MainActivity extends ActionBarActivity {
    TextView textView = (TextView)findViewById(R.id.defaultText);

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
        setContentView(R.layout.activity_main);

        textView.setText("Hello");
    }
} 

5 个答案:

答案 0 :(得分:2)

My application stops when I declare the TextView outside the onCreate method

这是因为布局尚未在您的活动中夸大,从而导致您的应用崩溃,我 100%确定错误为NPE,当您在此处设置文字时:{{1 }}

<强>解决方案:

始终在textView.setText("Hello");之后TextViewOncreate初始化setContentView并将textView对象作为全局实例。

public class MainActivity extends ActionBarActivity {
   TextView textView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
        setContentView(R.layout.activity_main);

        textView = (TextView)findViewById(R.id.defaultText);
        textView.setText("Hello");
    }
}

答案 1 :(得分:2)

您无法在函数外声明视图。

TextView tv; 在OnCreate中: tv = (TextView)findViewById(...)

答案 2 :(得分:0)

正如其他人指出的那样,你得到的错误是因为包含TextView作为孩子的视图尚未被夸大。您应声明强引用,然后在onCreate()方法上实例化该变量。如果你坚持使用这样的代码,那么我建议你看看依赖注入。

答案 3 :(得分:0)

要做到这一点:

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

首先将内容视图设置为活动,否则将无效。

答案 4 :(得分:-1)

我遇到了这个问题,并通过使用(tag)作为视图(myTextView.tag)解决了这个问题 您可以从此处进一步了解此属性:

What is the main purpose of setTag() getTag() methods of View?

我的意思是,我在onCreate方法之外声明了一个称为(counter)的变量,然后在需要使用他的标记的任何地方找到我的视图。

希望有帮助