AppCompatActivity контекстного действия не отображается

У меня есть активность, расширяющая AppCompatActivity, и я хочу установить на ней контекстную панель действий. Итак, вот мой метод onCreate

Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
MainActivity.this.startSupportActionMode(new ActionBarCallBack());

Мой ActionBarCallBack расширяет android.support.v7.view.ActionMode, и я объявил это так

@Override
public boolean onCreateActionMode(ActionMode mode, Menu menu) {
    mode.getMenuInflater().inflate(R.menu.contextual_menu, menu);
    return false;
}

Тема, установленная в моем манифесте:

<style name="AppTheme.NoActionBar">
    <item name="windowActionBar">false</item>
    <item name="windowNoTitle">true</item>
    <item name="windowActionModeOverlay">true</item>
</style>

Основная деятельность:

<activity
        android:name=".MainActivity"
        android:label="@string/title_activity_main2"
        android:theme="@style/AppTheme.NoActionBar" >
</activity>

Мой триггер onCreateActionMode, но CAB никогда не отображается.

Любые идеи?


person aiqency    schedule 27.01.2016    source источник
comment
У вашей темы действительно нет родителя? Я всегда думал, что он должен наследовать (в данном случае) от Theme.AppCompat.NoActionBar.   -  person Bö macht Blau    schedule 27.01.2016
comment
Ну, я редактирую свой вопрос с полным стилем.xml и объявлением активности манифеста.   -  person aiqency    schedule 27.01.2016
comment
Итак, кажется, что ваша тема активности действительно не имеет родителя. Что произойдет, если вы добавите parent=Theme.AppCompat.Light.NoActionBar?   -  person Bö macht Blau    schedule 27.01.2016
comment
Gradle Build жалуется, что для атрибута «родительский» не найден идентификатор ресурса. На всякий случай я увидел, что моя панель инструментов наследуется от AppTheme.PopupOverlay.   -  person aiqency    schedule 27.01.2016
comment
Хорошо, только что увидел решение, я редактирую свой вопрос. Спасибо 0X0nosugar   -  person aiqency    schedule 27.01.2016


Ответы (2)


Так вот была ошибка

@Override
public boolean onCreateActionMode(ActionMode mode, Menu menu) {
    mode.getMenuInflater().inflate(R.menu.contextual_menu, menu);
    return true; // Now it works
}

Установите windowActionModeOverlay на мой Theme.NoActionBar

<item name="windowActionModeOverlay">true</item>

Не нужно устанавливать startActionMode() из моей панели инструментов, как я видел в потоке переполнения стека. На android.support.v7.view.ActionMode эта строка у меня отлично работает.

Main2Activity.this.startSupportActionMode(new ActionBarCallBack()); //android.support.v7.view.ActionMode
person aiqency    schedule 27.01.2016
comment
Из документации для onCreateActionMode() Возвращает: true, если режим действия должен быть создан, false, если вход в этот режим должен быть прерван. - person Bö macht Blau; 27.01.2016

Вы возвращаете false из реализованного метода onCreateActionMode в вашем ActionMode.Callback.

Попробуйте изменить возвращаемое значение на true.

@Override
public boolean onCreateActionMode(ActionMode mode, Menu menu) {
    // Inflate menu
    return true; //  <=====  MUST RETURN TRUE
}
person lincollincol    schedule 22.04.2020
comment
Спасибо за ваше время, но я уже ответил на него. Я проверю свой ответ. - person aiqency; 22.04.2020
comment
@aiqency Нет проблем, может быть, это поможет кому-нибудь в будущем :) - person lincollincol; 22.04.2020