Я знаю, что 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 не работает очень хорошо (потоки, которые получают объекты от базы данных, дают проблемы). Там другие пути состоят в том, чтобы совместно использовать меню хотя Операции?
Спасибо
]Я не вижу причин, по которым это не сработало бы идеально:[
] [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 не должно создавать проблем, подобных описанной.[
].Я использую вспомогательный класс со статическими методами для инициализации и обработки общих опций меню, затем каждое 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: Я не использую общий базовый класс, потому что для начала мне понадобится два из них, один для действий и другой для действий со списком, а затем, в моем случае, мне понадобится добавить пользовательские опции меню для некоторых действий.
.