Установка глобальных объектов Button и EditText - PullRequest
2 голосов
/ 26 июня 2010

Я получаю исключения нулевого указателя, когда пытаюсь инициализировать объекты Button и EditText в глобальной области видимости, не могу понять это.Я закомментировал все, кроме минимума, чтобы приложение отображало мой макет, но это все равно вызывает сбой:

private EditText addmoney = (EditText)findViewById(R.id.addmoney);

R.id.addmoney определенно существует.Так какого черта?Разве невозможно объявить EditText в глобальной области видимости?Мне нужно иметь возможность вызывать его как из onCreate, так и из OnPause в классе, расширяющем Activity, есть ли другой способ сделать это?

РЕДАКТИРОВАТЬ:

Я пытался использовать метод shadeсначала надуваем компоновку, но это вызывает ошибки, очевидно, вам не разрешено использовать системные службы до вызова onCreate (), а для надувания представления требуется один.

Ответы [ 2 ]

3 голосов
/ 26 июня 2010

Вы должны выполнить findViewById только после того, как вы установили контент для своей текущей деятельности.

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.home);
    addmoney = (EditText)findViewById(R.id.addmoney);//it knows in which file to search for the id
}
2 голосов
/ 26 июня 2010

В качестве альтернативы, вы можете сделать что-то вроде этого:

private View dummy = (View) View.inflate(this, R.layout.dummy, null);
private EditText addmoney = (EditText) dummy.findViewById(R.id.addmoney);

... и в onCreate (или где-либо еще):

setContentView (dummy);

Поскольку у вас уже есть родительский элементэкземпляр EditText создан, вы можете ссылаться на него, не имея NPE.

ПРИМЕЧАНИЕ : Первый параметр inflate - это Context .Следовательно, вам нужен работающий контекст, чтобы это работало.

  • Упс, неправильный класс: D
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...