Страницы

Поиск по вопросам

пятница, 10 января 2020 г.

Абстрактный класс BaseActivity

#java #android


Я хочу создать абстрактный класс BaseActivity, от которого бы наследовались остальные
Activity в проекте, во всех классах Activity у меня сейчас используется Toolbar, поэтому
хочу перенести функционал связанный с Toolbar в BaseActivity. Не знаю, как это правильно
сделать. 

Делаю так, класс BaseActivity:

public abstract class BaseActivity  extends AppCompatActivity {

    Toolbar toolbar;

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

        toolbar = (Toolbar) findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);
        // NullPointerException
        toolbar.setTitleTextColor(Color.WHITE);
        toolbar.setSubtitleTextColor(Color.WHITE);
        toolbar.setNavigationIcon(R.drawable.ic_arrow_back_24dp);
    }

    public void addToolbarTitle(String titleName){
        toolbar.setTitle(titleName);
    };
} 


Потом наследуюсь обычной Activity от BaseActivity: 

public class ConversationActivity extends BaseActivity  {

  @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_conversation);
}

}


Получаю NullPointerException в BaseActivity, как это сделать правильно? 
    


Ответы

Ответ 1



До вызова setContentView() представления не существует и вызов findViewById(R.id.toolbar) вернёт null. Вынесите код установки toolbar'а в отдельный метод в BaseActivity и вызывайте его в onCreate() дочерних классов после установки макета. public abstract class BaseActivity extends AppCompatActivity { Toolbar toolbar; protected void setToolbar() { toolbar = (Toolbar) findViewById(R.id.toolbar); setSupportActionBar(toolbar); toolbar.setTitleTextColor(Color.WHITE); toolbar.setSubtitleTextColor(Color.WHITE); toolbar.setNavigationIcon(R.drawable.ic_arrow_back_24dp); } public void addToolbarTitle(String titleName){ toolbar.setTitle(titleName); }; } public class ConversationActivity extends BaseActivity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_conversation); setToolbar(); } }

Комментариев нет:

Отправить комментарий