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