#java #android #android-layout
#java #Android #android-макет
Вопрос:
Я создаю целевую страницу с рядом кнопок для других действий. LandingActivity расширяет пользовательскую базовую активность. Кнопки имеют свой собственный 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();
Это приводит к исключению 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 был аккуратным, если это возможно.
Ответ №1:
Вы не можете инициализировать свои представления раньше onCreate
, потому что именно с этого начинается ваша активность.
Вы не можете инициализировать что-либо в своем классе activity до того, как вы уже инициализировали activity.
Поэтому, если вы хотите извлечь свои инициализации в метод, просто вызовите этот метод внутри onCreate
:
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.layout);
initViews();
}
Из документации :
Вызывается при запуске действия. Именно здесь должна проходить большая часть инициализации: вызов setContentView(int) для расширения пользовательского интерфейса activity, использование findViewById(int) для программного взаимодействия с виджетами в пользовательском интерфейсе
Комментарии:
1. Я все это понимаю и заявил после первого абзаца, что я уже пробовал это.
2. Я просто хотел сказать, что вы не можете инициализировать свои представления раньше
onCreate
, это также то, что я понимаю из вашего вопроса, который вы задаете3. Ах, гоча. Я обновил свой вопрос, чтобы отразить правильное onCreate.