Пункты меню отображаются на панели действий в 2.1, но не в 4.0.3, 4.2 (nexus 4) с использованием ActionBarSherlock

Я пытаюсь внедрить ActionBarSherlock в свой проект. Добавление элементов меню/действий на панель действий работает на 2.1, но не на моем эмуляторе nexus4, а не на эмуляторе 4.0.3. Проблема в том, что функция onCreateOptionsMenu(Menu menu) никогда не вызывается на моем устройстве, но вызывается в 2.1, и, следовательно, на панели действий в моем телефоне не отображаются элементы действий.

  1. Я включил ActionBarSherlock в качестве библиотеки в свой проект.
  2. Я установил соответствующую тему в приложении в файле манифеста.
  3. Я расширил свой класс активности с помощью SherlockActivity.
  4. Я переопределил соответствующий класс из библиотеки sherlock (насколько я знаю, иначе меню не отображалось бы на панели действий и в версии 2.1)

Ниже приведена часть манифеста, в которой задана тема.

<application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/Theme.Sherlock.Light.DarkActionBar" >

Ниже приведен файл menu.xml:

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android" >

    <item
        android:id="@+id/menu_item_call"
        android:showAsAction="always"
        android:title="Call"/>
    <item
        android:id="@+id/menu_item_share"
        android:showAsAction="always"
        android:title="Share"/>
    <item
        android:id="@+id/menu_item_save"
        android:showAsAction="always"
        android:title="Save"/>

</menu>

Ниже приводится соответствующая часть деятельности.

    //other imports
        import com.actionbarsherlock.app.SherlockActivity;
        import com.actionbarsherlock.view.Menu;
        import com.actionbarsherlock.view.MenuInflater;
        import com.actionbarsherlock.view.Window;

        public class SelectCategories extends SherlockActivity implements
                OnClickListener {


        //other code


        @Override
        public boolean onCreateOptionsMenu(Menu menu) {
            // TODO Auto-generated method stub
            MenuInflater inflater = getSupportMenuInflater();
            inflater.inflate(R.menu.menu, menu);
            return super.onCreateOptionsMenu(menu);
//return true; also has no effect
        }
        }

Я пытался решить эту проблему, и это было несколько часов, но не смог. Помогите пожалуйста мне. Заранее спасибо.


person Dipendra    schedule 07.07.2013    source источник
comment
Возможно, также установите тему android:theme в Activity или проверьте свой класс переопределения в библиотеке sherlock.   -  person Gina    schedule 08.07.2013


Ответы (4)


Вы должны вернуть true; вместо super.onCreateOptionsMenu(menu);

person Jon    schedule 07.07.2013

Это функция onCreateOptionsMenu, которую я использую в своем проекте с ActionBarSherlock:

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
       getSupportMenuInflater().inflate(R.menu.menu, menu);
       return true;
    }

Хотел бы я рассказать вам, почему ваш не работает правильно.

person michaelcarrano    schedule 08.07.2013

У вас было это в onCreate

private ActionBar mActionBar;
mActionBar = getSupportActionBar();
// mActionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_STANDARD);
// mActionBar.setDisplayOptions(0, ActionBar.DISPLAY_SHOW_TITLE);

нужно импортировать

import com.actionbarsherlock.app.ActionBar;

Обновление: панель действий

Открытая декларация

com.actionbarsherlock.app.ActionBar

Окно в верхней части действия, которое может отображать название действия, режимы навигации и другие интерактивные элементы.

Начиная с Android 3.0 (уровень API 11), панель действий появляется в верхней части окна действия, когда действие использует тему Holo системы (или одну из ее дочерних тем), которая используется по умолчанию. В противном случае вы можете добавить панель действий, вызвав requestFeature(FEATURE_ACTION_BAR) или объявив ее в настраиваемой теме с помощью свойства windowActionBar.

По умолчанию на панели действий слева отображается значок приложения, за которым следует название действия. Если в вашем действии есть меню параметров, вы можете сделать выбранные элементы доступными непосредственно из панели действий как «элементы действия». Вы также можете изменить различные характеристики панели действий или полностью удалить ее.

Из вашей активности вы можете получить экземпляр ActionBar, вызвав getActionBar().

В некоторых случаях панель действий может быть перекрыта другой панелью, которая позволяет выполнять контекстные действия с помощью android.view.ActionMode. Например, когда пользователь выбирает один или несколько элементов в вашей активности, вы можете включить режим действий, который предлагает действия, характерные для выбранных элементов, с пользовательским интерфейсом, который временно заменяет панель действий. Хотя пользовательский интерфейс может занимать то же место, API-интерфейсы android.view.ActionMode отличаются и независимы от API-интерфейсов ActionBar.

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

person Gina    schedule 08.07.2013
comment
Но что делать с этим объектом, если мы его не используем? - person Dipendra; 08.07.2013
comment
Что вы имеете в виду, я добавляю только это, и мое приложение работает как на 2.3, так и на 4.0.3. удалите комментарий, если это работает для вас, я комментирую его, потому что не уверен, что он вам подходит. - person Gina; 08.07.2013
comment
mActionBar имеет нулевое значение. Поражен. Может в этом причина. Надо разобраться. - person Dipendra; 08.07.2013
comment
null actionBar попробуйте добавить в onCreate requestWindowFeature(Window.FEATURE_ACTION_BAR); //not sure which feature - person Gina; 08.07.2013

Наконец-то разобрался с проблемой.

Infact, я пытался изменить существующий проект, чтобы использовать панель действий. И главное, проект использует TabActivity, который устарел. Поскольку ActionBarSherlock не предоставляет свою собственную реализацию, я подумал, что его следует использовать как есть. И это была моя ошибка. После удаления tabactivity я вижу меню в обеих версиях.

Большое спасибо всем, кто пытался помочь.

person Dipendra    schedule 10.07.2013