Проблема с Android ActivityGroup Menu - PullRequest
6 голосов
/ 01 июля 2010

У меня одна проблема с использованием ActivityGroup.У меня есть два действия внутри ActivityGroup, и они оба используют меню (переопределяя onCreateOptionMenu и onOptionsItemSelected).

Ну, проблема в том, что второе действие в группе не показывает меню, когда янажмите клавишу меню.Первое задание работает нормально, показывая меню.

Есть идеи об этой проблеме?

У меня есть этот код в дочернем задании:

    @Override
public boolean onCreateOptionsMenu(Menu menu) {
    boolean result = super.onCreateOptionsMenu(menu);
    menu.add(0, MENU_REFRESH, 0, R.string.menu_refresh).setIcon(R.drawable.ic_menu_refresh);
    return result;
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
    case MENU_REFRESH:
        Log.d(TAG,"REFRESH");
        refresh();
        return true;
    }
    return super.onOptionsItemSelected(item);
}

Ответы [ 5 ]

7 голосов
/ 23 октября 2010

Другой хороший способ справиться с этим - использовать LocalActivityManager ActivityGroup. Получите локального менеджера действий, получите текущее действие и выполните соответствующий метод этого действия:

public boolean onPrepareOptionsMenu(Menu menu) {
    //super.onPrepareOptionsMenu(menu);
    return getLocalActivityManager().getCurrentActivity()
        .onCreateOptionsMenu(menu);
}

public boolean onCreateOptionsMenu(Menu menu) {
    //super.onCreateOptionsMenu(menu);
    return getLocalActivityManager().getCurrentActivity()
        .onCreateOptionsMenu(menu);
}

public boolean onMenuItemSelected(int featureId, MenuItem item) {
    //super.onMenuItemSelected(featureId, item);
    return getLocalActivityManager().getCurrentActivity()
        .onMenuItemSelected(featureId, item);
}

Примечание: используя эту стратегию, вы не должны вызывать super.onCreateOptionsMenu из дочернего действия - это вызывает исключение переполнения стека. Я не уверен, какова цель вызова методов on * суперкласса, так как я их опускал и не видел отрицательных результатов. (... пока)

2 голосов
/ 28 декабря 2012

используйте этот код на вкладке GroupActivity

@Override
public boolean onCreateOptionsMenu(Menu menu) 
{
    // TODO Auto-generated method stub


    return  getLocalActivityManager().getCurrentActivity().onCreateOptionsMenu(menu);
}

@Override
public boolean onMenuItemSelected(int featureId, MenuItem item) {
    // TODO Auto-generated method stub
    return getLocalActivityManager().getCurrentActivity().onMenuItemSelected(featureId, item);
}

используйте код, который приведен ниже в двух дочерних действиях

@Override
public boolean onCreateOptionsMenu(Menu menu) {

    getMenuInflater().inflate(R.menu.menu_1, menu);
    return true;
}// menu_1 is the xml file in menu folder
@Override
public boolean onMenuItemSelected(int featureId, MenuItem item) {

    switch (item.getItemId()) {
    case R.id.weekly:
        Intent weekly = new Intent(getParent(),Activity1.class);
        TabGroupActivity parentActivity = (TabGroupActivity)getParent();
        parentActivity.startChildActivity("weeklyview", weekly);

        break;

    case R.id.daily :
        Intent daily = new Intent(getParent(),Activity2.class);
        TabGroupActivity parentActivity2 = (TabGroupActivity)getParent();
        parentActivity2.startChildActivity("daily", daily);
        break;

    default:
        break;
    }

    //use return true
return true;
}
2 голосов
/ 16 августа 2011

Необходимо переопределить методы меню в группе действий и вызвать соответствующие методы для дочернего действия.См. Эту статью: Как создать меню параметров дочерней активности внутри группы действий

public class TestGroup extends ActivityGroup {
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        //start child activity
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        return getLocalActivityManager().getCurrentActivity().onCreateOptionsMenu(menu);
    }

    @Override
    public boolean onMenuItemSelected(int featureId, MenuItem item) {
        return getLocalActivityManager().getCurrentActivity().onMenuItemSelected(featureId, item);
    }
}
1 голос
/ 16 ноября 2010

Еще один подход - создать меню в корне ActivityGroup, а затем использовать public boolean onPrepareOptionsMenu (Меню меню) для очистки и повторного добавления пунктов меню.

В классе ActivityGroup:

@Override
public boolean onCreateOptionsMenu(Menu menu)
{
    //what is the current activity?
    menu.add(0, 0, 0, "holder");
    return true;
}

@Override
public boolean onPrepareOptionsMenu(Menu menu)
{
    //start a new
    menu.clear();
    //add some menu options
    .getLocalActivityManager().getCurrentActivity().onPrepareOptionsMenu(menu);
    return super.onPrepareOptionsMenu(menu);
}

В действии:

@Override
public boolean onPrepareOptionsMenu(Menu menu)
{ //add menus or inflate here
    return true;
}
1 голос
/ 01 июля 2010

Отметьте этот поток.

Меню можно обрабатывать в родительской активности, но создавать в дочернем действии

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...