Вопросы о повторном использовании панели инструментов в нескольких действиях

#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....
}
}