#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(); } }
Комментариев нет:
Отправить комментарий