Я хочу создать абстрактный класс 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, как это сделать правильно?
До вызова 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();
}
}
Современные инструменты для криптотрейдинга: как технологии помогают принимать решения
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости