Я создаю целевую страницу с рядом кнопок для других действий. LandingActivity расширяет пользовательскую BaseActivity. Кнопки имеют собственный RelativeLayout с изображением и некоторый текст с классом LandingButton
для их обработки. Прямо сейчас все работает, пока мои кнопки объявлены и настроены все в onCreate. Я хотел бы выделить немного больше.
Я попытался объявить их перед onCreate, инициализировать их в моем методе initViews() и вызвать его внутри onCreate, как это было бы с любым стандартным представлением.
public class LandingActivity extends BaseActivity {
LandingButton bMyData = new LandingButton(this, R.id.myDataButton);
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_layout)
//initViews();
Это приводит к LandingButton.java
NullPointerException, указывающему мне на LandingButton.java
public LandingButton(Context context, int id)
{
super(context);
if (!(context instanceof Activity))
return;
Я также попытался изменить свой LandingButton, чтобы ссылаться на BaseActivity вместо Activity:
if (!(context instanceof BaseActivity))
return;
Та же ошибка Приложение вылетает во время отладки, как только оно попадает в OnCreate, не давая мне продолжать.
В идеале я хотел бы объявить мои LandingButtons перед onCreate и отредактировать их в initViews(), чтобы мой метод onCreate оставался аккуратным, если это возможно.
Вы не можете инициализировать свои представления до onCreate
потому что именно здесь начинается ваша деятельность.
Вы не можете инициализировать что-либо в своем классе активности, прежде чем уже инициализировали деятельность.
Так что если вы хотите извлечь ваши инициализации в метод, просто вызовите этот метод внутри onCreate
:
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.layout);
initViews();
}
Из документации:
Вызывается, когда начинается действие. Это то место, где должна выполняться большая часть инициализации: вызов setContentView (int) для раздувания пользовательского интерфейса активности, использование findViewById (int) для программного взаимодействия с виджетами в пользовательском интерфейсе
onCreate
, это также то, что я понимаю из вашего вопроса, который вы задаете