Android:仅使用FindViewById设置小部件一次

时间:2011-11-03 21:14:58

标签: android widget

现在,每次我想访问我使用的小部件时:

    mEditText1 = (EditText) findViewById(R.id.edittext1);

然后在小部件上执行我想要的操作。

但是,我想知道我是否能够存储对窗口小部件的引用并在活动中的不同方法中多次使用该引用,而不必总是调用findViewById ......

我尝试了以下内容:

    public class MyActivity extends Activity {

        public static String ACTIVITY_NAME = "MyActivity";
        EditText mEditText1;

        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            Log.v(this.APP_NAME, "In " + ACTIVITY_NAME);

            mEditText1 = (EditText) findViewById(R.id.edittext1);

            setContentView(R.layout.main); 
            prefillFieldsIfNecessary();

       }

       private void prefillFieldsIfNecessary(){
          if(AppPreferences.checkExistence(MyActivity.this, AppPreferences.Name)) {
              mEditText1.setText(AppPreference.Name);
       }

然而,我的应用程序崩溃了,我得到了一个N​​ullPointerException,我知道它与mEditText1.setText()行说话,因为当我发表评论时,我的应用运行正常。

2 个答案:

答案 0 :(得分:2)

阿莎,这应该有效并且完全有效。你怎么知道它不起作用?你收到错误了吗? textToSave是否未正确填充?

答案 1 :(得分:1)

检查您是否声明“EditText mEditText1;” 导入语句之后 之前您的类声明。同时指定访问修饰符,不指定类字段的访问修饰符也不好。如果您可以发布您的Activity的完整示例,那将是很好的,这样我们就可以看到您是否声明了“EditText mEditText1”;作为班级成员或变量。

修改 移动

setContentView(R.layout.main); 

之后

super.onCreate(savedInstanceState);

你会没事的。一般尝试有这两行 在onCreate()之上,在这两行之后完成所有逻辑。