Как я могу инициализировать мой RelativeLayoutButton вне метода onCreate? - PullRequest
1 голос
/ 13 апреля 2019

Я создаю целевую страницу с серией кнопок для других действий.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();

Это приводит к исключению NullPointerException, указывающему на LandingButton.java

public LandingButton(Context context, int id)
{
    super(context);

    if (!(context instanceof Activity))
        return;

Iтакже попытался изменить свой LandingButton, чтобы ссылаться на BaseActivity вместо Activity:

    if (!(context instanceof BaseActivity))
        return;

Та же ошибка.Приложение аварийно завершает работу во время отладки, как только оно попадает в onCreate, не давая мне много чего сделать.

В идеале я хотел бы объявить мои LandingButtons перед onCreate и отредактировать их в initViews (), чтобы мой метод onCreate был аккуратным, есливозможный.

1 Ответ

1 голос
/ 14 апреля 2019

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

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

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

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

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...