ListView Multiselect onCreateActionMode вызывает появление 2 панелей действий - PullRequest
0 голосов
/ 21 мая 2018

У меня есть приложение для Android, в котором у меня есть основной макет, в который в качестве части макета включена панель поддержки, используя:

<include layout="@layout/toolbar"
     android:layout_width="match_parent"
     android_layout_height="wrap_content" />

Включаемая панель инструментов:

layout / toolbar.xml

        <TextView
            android:id="@+id/txtViewHeading"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:paddingLeft="5dp"
            android:paddingRight="5dp"
            android:text="@string/main_tab_status"
            android:textAppearance="?android:attr/textAppearanceLarge"
            android:textStyle="bold"
            android:textSize="28sp"
            android:ellipsize="end"
            android:lines="1"
            android:gravity="center"
            android:layout_gravity="center" />

</android.support.v7.widget.Toolbar>

Затем в своей основной деятельности я раздуваю свой XML toolbar_menu в методе onCreateOptionsMenu следующим образом:

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.toolbar_menu, menu);
    btnShare = menu.findItem(R.id.btnShare);
    btnSelectAll = menu.findItem(R.id.btnSelectAll);
    btnDelete = menu.findItem(R.id.btnDelete);
    return true;
}

Однако, когда я пытаюсь использовать мой ListView в режиме CHOICE_MODE_MULTIPLE_MODAL, он также имеет метод onCreateActionMode.Думая, что я сделаю то же, что и раньше, я снова раздуваю меню, используя это:

@Override
public boolean onCreateActionMode(ActionMode actionMode, Menu menu) {
     actionMode.getMenuInflater().inflate(R.menu.toolbar_menu, menu);
     return true;
}

Однако это заставляет другое меню появляться над моим главным меню панели инструментов, как показано на скриншоте ниже. enter image description here

Я не хочу, чтобы появилось второе меню, я хочу, чтобы оно использовало существующую панель инструментов, которая находится в моем основном макете.Как мне это сделать?

Мой Main.java (основное действие) определяется как AppCompatActivity, где Messages.java - это фрагмент, который загружается в основное действие.

Ответы [ 2 ]

0 голосов
/ 05 июня 2018

Создание стиля с помощью NoActionBar:

<!-- Base application theme. -->
<style name="AppThemeNoActonBar" parent="Theme.AppCompat.NoActionBar">
    <!-- Customize your theme here. -->
    <item name="colorPrimary">@color/colorPrimary</item>
    <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
    <item name="colorAccent">@color/colorAccent</item>
</style>

Используйте этот стиль в AndroidManifest.xml в теге активности:

<activity
        android:name=".MainActivity"
        android:theme="@style/AppThemeNoActonBar" />

, затем добавьте панель инструментов в макет своей деятельности:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">

<android.support.v7.widget.Toolbar
    android:id="@+id/toolbar"
    android:layout_width="wrap_content"
    android:layout_height="56dp" />

<RelativeLayout
    android:id="@+id/content"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_below="@+id/toolbar">

    <!--YOUR LAYOUT CODE-->

</RelativeLayout>

Затем инициализируйте код Java для действия:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_third);
    Toolbar toolbar=findViewById(R.id.toolbar);
    setSupportActionBar(toolbar);
}
0 голосов
/ 21 мая 2018

Добавить тему панели действий без действия в манифест.

<activity android:name=".YourActivity"
     android:theme="@style/YourThemeNoActionBar"/>
...