Android: Как иметь общее меню в каждом (Список) Действие, не переписывая переопределенные методы?

Я знаю, что Android предоставляет некоторые полезные методы, которые будут переопределены, для определения меню:

    @Override
 public boolean onCreateOptionsMenu(Menu menu) {
  menu.add(0, AIS, 0, "Activity Inventory Sheet").setIcon(android.R.drawable.ic_menu_upload);
                // ...
  return true;
 }

 public boolean onOptionsItemSelected(MenuItem item) {
  Intent i;
     switch (item.getItemId()) {
     case AIS: i = new Intent(this, ActivityInventorySheet.class);
      startActivity(i);
               return true;
     // ...
     }
     return false;
 }

Я хотел бы совместно использовать это меню каждым Действием и ListActivity моего приложения Android. Это для того, чтобы иметь стандартное меню в каждом (Список) Действие, которое позволяет пользователю перейти к каждой части приложения в щелчке.

Прямо сейчас самым легким способом достигнуть этого являются к копии-и-вставке оба метода в каждом (Список) Действие приложения. Мне не нравится это дублирование записанного кода :)

Действительно ли разделение на подклассы является разумным выбором? Я уже видел, что разделение на подклассы одного из моих ListActivity не работает очень хорошо (потоки, которые получают объекты от базы данных, дают проблемы). Там другие пути состоят в том, чтобы совместно использовать меню хотя Операции?

Спасибо

6
задан dgraziotin 5 January 2010 в 14:04
поделиться

2 ответа

[

]Я не вижу причин, по которым это не сработало бы идеально:[

] [
public abstract class MyListActivity extends ListActivity
{
   @Override
   public boolean onCreateOptionsMenu(Menu menu) {
      menu.add(0, AIS, 0, "Activity Inventory Sheet").setIcon(android.R.drawable.ic_menu_upload);
      // ...
      return true;
   }

   @Override
   public boolean onOptionsItemSelected(MenuItem item) {
      Intent i;
      switch (item.getItemId()) {
          case AIS: i = new Intent(this, ActivityInventorySheet.class);
          startActivity(i);
          return true;
          // ...
      }
      return false;
   }    
}
] [

]Тогда просто попросите, чтобы ваша Деятельность расширила MyListActivity вместо ListActivity.[

] [
] [

]Я уже видел этот подкласс. один из моих ListActivity не работает. очень хорошо (резьбы, которые извлекают объекты из базы данных предоставляют проблемы).[

] [
] [

] Звучит как совершенно другая проблема. Возможно, вы захотите задать отдельный вопрос по этому поводу. Простое расширение класса в Java не должно создавать проблем, подобных описанной.[

].
10
ответ дан 8 December 2019 в 04:52
поделиться

Я использую вспомогательный класс со статическими методами для инициализации и обработки общих опций меню, затем каждое Activity определяет свое собственное onCreateOptionsMenu и т.д., которое делегирует общие задачи вспомогательному классу, и может добавлять дополнительные пункты меню, специфичные для этого Activity.

Что-то вроде

class SharedMenu {
    public static void onCreateOptionsMenu(Menu menu) {
        menu.add(...);
        menu.add(...);
    }
}

public class MyActivity extends Activity {

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        super.onCreateOptionsMenu(menu);
        menu.add(...);  // specific to this activity
        SharedMenu.onCreateOptionsMenu(menu);
        return true;
    }

}

с дополнительными методами для onMenuItemSelected и т.д.

Edit: Я не использую общий базовый класс, потому что для начала мне понадобится два из них, один для действий и другой для действий со списком, а затем, в моем случае, мне понадобится добавить пользовательские опции меню для некоторых действий.

.
13
ответ дан 8 December 2019 в 04:52
поделиться
Другие вопросы по тегам:

Похожие вопросы: