#android
#Android
Вопрос:
Я новичок в разработке Android, и, вероятно, на этот вопрос есть простой ответ, который я не могу найти.
В настоящее время я хочу использовать панель инструментов почти в каждом действии моего приложения. Я создал базовое действие со всеми прослушивателями элементов и методом, который устанавливает панель инструментов (setSupportActionBar)
, и XML, в котором есть только панель инструментов и ее настройки. Эта часть сама по себе работает нормально.
Теперь мои вопросы возникают, когда я хочу, чтобы какое-либо действие расширило это базовое действие:
- Должен ли я устанавливать setContentView как в базовом, так и в дочернем действии?
- Если я устанавливаю панель инструментов в базовом действии в методе onCreate, когда я устанавливаю contentView в дочернем действии после вызова super.onCreate, оно переопределяется. Единственное, что сейчас работает, — это вызов super.onCreate в дочернем элементе, затем setContentView (childLayout), затем вызов расширенного метода базового действия, который устанавливает панель инструментов. Я чувствую, что это своего рода хакерство, и должны быть лучшие способы сделать это.
- Должен ли я вручную добавлять панель инструментов в XML каждого дочернего действия? Это не большая проблема, но я чувствую, что может быть способ «автоматически» добавлять ее к каждому дочернему элементу.
Большое вам спасибо за вашу помощь!
Комментарии:
1. более простым способом будет использование styles.xml
2. Не могли бы вы подробнее рассказать об этом @VivekMishra?
3. Сначала попробуйте расширить ее самостоятельно. Тема вашего приложения должна расширяться от
ActionBar
темы
Ответ №1:
-
Должен ли я устанавливать setContentView как в базовом, так и в дочернем действии?
-> Нет, вам не обязательно устанавливать contentView в обоих. подойдет только установка в дочерней активности.
-
Если я устанавливаю панель инструментов в базовом действии в методе onCreate, когда я устанавливаю contentView в дочернем действии после вызова super.onCreate, оно переопределяется. Единственное, что работает сейчас, это вызов super.onCreate в дочернем элементе, затем setContentView (childLayout), затем вызов расширенного метода BaseActivity, который устанавливает панель инструментов. Я чувствую, что это своего рода хакерство, и должны быть лучшие способы сделать это.
-> Включите макет панели инструментов в действие, которое вы хотите использовать. если вы хотите использовать в каждом действии, тогда включите в каждый xml.
-
Должен ли я вручную добавлять панель инструментов в XML каждого дочернего действия? Это не большая проблема, но я чувствую, что может быть способ «автоматически» добавлять ее в каждый дочерний элемент.
-> Да, запускайте панель инструментов в onCreate () для каждого действия. я не думаю, что есть другой способ сделать это.
Ответ №2:
Вы можете изменить свою базовую активность следующим образом
public abstract class BaseActivity extends AppCompatActivity {
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(getContentView());
// here you can do common things for all activities like toolbar
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); // Note: every activity xml should have toolbar.
setSupportActionBar(toolbar);
onViewReady(savedInstanceState, getIntent());
}
protected void onViewReady(Bundle savedInstanceState, Intent intent) {
// To be used by child activities.
}
protected abstract int getContentView();
}
И расширяет BaseActivity в дочерней активности как
public class ChildActivity extends BaseActivity{
@Override
protected int getContentView() {
return R.layout.activity_child;
}
@Override
protected void onViewReady(Bundle savedInstanceState, Intent intent) {
super.onViewReady(savedInstanceState, intent);
// initializations....
}
}