Пытаюсь инициализировать 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()
Комментариев нет:
Отправить комментарий