Страницы

Поиск по вопросам

воскресенье, 7 апреля 2019 г.

Инициализация View в классе Activity

Пытаюсь инициализировать View через метод findViewById(), прямо в классе MainActivity, чтобы затем, при многократном использовании одного и того же View через onClick, метод findViewById() не вызывался много раз, но при инициализации прямо в классе MainActivity приложение вылетает.
Что я делаю неправильно и как можно один раз инициализировать View для всех последующих методов?
public class MainActivity extends Activity {
public View customView = (View) findViewById(R.id.btn);
public void onCustomClick(View view) { switch (view.getId()) { case R.id.btn: customMethod(customView); break; // и т.д.
} }
private void customMethod (View customVar) { // тело метода } }


Ответ

findViewById должно вызываться например в onCreate() методе активити. Т.е. оставьте public View customView; а в onCreate добавьте:
customView = (View) findViewById(R.id.btn);
UPD. Если копнуть глубже то в Activity у вас в самом начале метода onCreate() есть вызов setContentView(). Это именно этот вызов инициализирует разметку для Activity и только после того как он отработал можно вызывать findViewById()
UPD2. Диаграмма жизненного цикла Activity, спасибо @hardsky за идею, см. http://developer.android.com/training/basics/activity-lifecycle/starting.html

Таким образом, исходя из диаграммы, провести инициализацию можно в: onCreate() после setContentView(), в методах onStart() и onResume()

Комментариев нет:

Отправить комментарий