Список действий ActionBar - используйте один и тот же ActionBar в нескольких действиях; Инициализировать в одном месте

101
18

Я нахожу, что переписываю один и тот же код для своего списка actionBar (actionBarSherlock) в 3 отдельных действиях. Все 3 используют тот же actionBar, у которого есть 3 элемента, которые запускают действия # 1, # 2, # 3.


getSupportActionBar().setNavigationMode(ActionBar.NAVIGATION_MODE_LIST);
ArrayAdapter<CharSequence> list = ArrayAdapter
.createFromResource(this, R.array.action_list, android.R.layout.simple_dropdown_item_1line);
list.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);

getSupportActionBar().setListNavigationCallbacks(list, this);
getSupportActionBar().setListNavigationCallbacks(adapter, this);
getSupportActionBar().setSelectedNavigationItem(position);


У меня есть 2 вопроса:


    Должен ли я использовать 1 активность с 3 фрагментами в этом случае? Мои действия - это список, вид карты и вид формы. Я не уверен, правильно ли это использовать Фрагменты, поскольку каждый из этих представлений использует весь экран в моем случае.


    Используя 3 разных действия, могу ли я создать новый класс, единственной целью которого является настройка моего ActionBar для меня с использованием вышеприведенного кода, чтобы код инициализации был только в 1 месте?


Что-то вроде:


public class setupActionBar {
private ActionBar myBar;
public setupActionBar(ActionBar myBar){
this.myBar = myBar;
//Do Initialization on myBar;
}

public ActionBar getMyBar(){
return myBar;
}
}

спросил(а) 2021-01-25T12:09:05+03:00 4 месяца, 4 недели назад
1
Решение
146

Смотрите это видео. Он создает BaseActivity, который подклассифицирует все действия, используемые в программе.
Аккуратный маленький трюк;)

Вы можете поблагодарить меня позже: D

ответил(а) 2021-01-25T12:09:05+03:00 4 месяца, 4 недели назад
44

Используя превосходные учебные пособия, предложенные @aindurti, я смог получить эту работу, используя BaseActivity, которая расширяет SherlockActivity, а затем мою Activity1, которая расширяет BaseActivity.


Однако, я испытываю странное поведение. Когда я выбираю Activity # 3 из счетчика, он немедленно возвращается к Activity # 1, причем onNavigationItemSelected вызывается 3 раза. Мысли о коде? Должен ли я перемещать onNavigationItemSelected в каждое действие? Я думал, что это будет сжатым и консолидированным способом.

В BaseActivity.java:


@Override
public boolean onNavigationItemSelected(int itemPosition, long itemId) {
//Tell user the FROM and TO navigationIndex
Toast.makeText(getApplicationContext(), "Selected: " + itemPosition + " from" + currentNavigationIndex, Toast.LENGTH_SHORT).show();

Intent myIntent;
if(itemPosition != currentNavigationIndex){
if(itemPosition == 0){ //Activity#1 Selected
myIntent = new Intent(BaseActivity.this, Activity1.class);
} else if (itemPosition == 1){ //Activity#2 Selected
myIntent = new Intent(BaseActivity.this, Activity2.class);
} else if (itemPosition == 2){ //Activity#3 Selected
myIntent = new Intent(BaseActivity.this, Activity3.class);
}
BaseActivity.this.startActivity(myIntent);
}
return true;
}

ответил(а) 2021-01-25T12:09:05+03:00 4 месяца, 4 недели назад
45

Есть несколько способов сделать это. Вы можете создать статическую функцию где-нибудь, чтобы выполнить инициализацию, или вы можете сделать что-то вроде создания базового класса для активности.


Например:


public class Bob
{
public static void dance(Dance someDance)
{
someDance.doBadDance();
}
}

Вы можете использовать это с Bob.dance(); в любом месте. Не уверен, должен ли класс быть окончательным или нет

ответил(а) 2021-01-25T12:09:05+03:00 4 месяца, 4 недели назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема