Как я могу инициализировать мой RelativeLayoutButton вне метода onCreate?

1

Я создаю целевую страницу с рядом кнопок для других действий. 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 оставался аккуратным, если это возможно.

Теги:
android-layout

1 ответ

1

Вы не можете инициализировать свои представления до onCreate потому что именно здесь начинается ваша деятельность.

Вы не можете инициализировать что-либо в своем классе активности, прежде чем уже инициализировали деятельность.

Так что если вы хотите извлечь ваши инициализации в метод, просто вызовите этот метод внутри onCreate:

public void onCreate(Bundle savedInstanceState){
    super.onCreate(savedInstanceState);

    setContentView(R.layout.layout); 
    initViews();
}

Из документации:

Вызывается, когда начинается действие. Это то место, где должна выполняться большая часть инициализации: вызов setContentView (int) для раздувания пользовательского интерфейса активности, использование findViewById (int) для программного взаимодействия с виджетами в пользовательском интерфейсе

  • 0
    Я все это понимаю и заявил после первого абзаца, что уже пробовал.
  • 0
    Я просто хотел сказать, что вы не можете инициализировать свои взгляды перед onCreate , это также то, что я понимаю из вашего вопроса, который вы задаете
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню