web-dev-qa-db-ja.com

ナビゲーションドロワーアイテムは選択されたままですAndroid

ナビゲーションドロワーに最後に選択したアイテムが表示され続けます。削除する方法はありますか?ユーザーがホームページにいる場合、ナビゲーションドロワーアイテムが強調表示されないようにする必要があります。

私が試してみました

drawer.setSelected(false);

onResume()で。しかし、それは助けにはなりません。

添付のスクリーンショットを参照してください。理解に役立ちます。

See the seetings options is highlighted even when I have come back from Settings activity

14
The Bat

以下のコードを使用してください:

_navigationView.getMenu().getItem(0).setChecked(false);
_

setNavDrawer();を呼び出した後に、このメソッドを呼び出します

getItem(int index)メソッドはMenuItemを取得し、そのMenuItemsetChecked(true);を呼び出すことができます。あとは、どの要素を見つけるかだけです。インデックスにはデフォルトがあり、0をそのインデックスに置き換えます。

以下を呼び出すことにより、アイテムを選択(ハイライト)できます。

_onNavigationItemSelected(navigationView.getMenu().getItem(0));
_

注:ネクサス4の場合、ライブラリリビジョン24.0.0をサポートします。 navigationView.setCheckedItem(id);の使用をお勧めします

3
Chirag Arora

上記のソリューションに加えて、drawer_view.xmlファイルのグループ要素に以下の属性が含まれている場合、

Android:checkableBehavior="single"

次の例に示すように:

<menu xmlns:Android="http://schemas.Android.com/apk/res/Android">

    <group Android:checkableBehavior="single" > 
        <item
            ... />
        <item
          ... />
    </group>
</menu>

上記の解決策はどれも機能しません。そのため、ハイライト機能を使用したくない場合は、その属性を使用しないでください。

20
oiyio

私が使う

_@Override
protected void onResume() {
    super.onResume();
    for (int i = 0; i < navigationView.getMenu().size(); i++) {
        navigationView.getMenu().getItem(i).setChecked(false);
    }
}
_

うまくいかなかった場合は、以下も追加してください:

itemOfMenu.setChecked(false);

onNavigationItemSelectedオーバーライドの最後まで。

8
Zakir

これを使って:

navigationView.getCheckedItem().setChecked(false);
3
masoomyf

@ Zakir の答えに追加すると、私のようにNavigationView内にサブメニューが含まれている場合、上記のコードは、上記のサブメニューに含まれるアイテムには影響しません。

これを解決するために、以下の再帰的な方法を実装してすべてのアイテムをクリアしました。

private void clearCheckedItems(Menu menu){
    for (int i = 0; i < menu.size(); i++) {
        MenuItem item = menu.getItem(i);
        if(item.hasSubMenu()){
            clearMenuChecked(item.getSubMenu());
        }else{
            item.setChecked(false);
        }
    }
}
1
David Passmore

メニューリソースファイルでAndroid:checkableBehaviorをnoneに設定しますAndroid:checkableBehavior="none"enter image description here

1

Kotlinを使用している場合、これが答えです。

menuItem.isCheckable = false
1

Googleアプリの動作を見ると、選択したものがタッチで表示されます。これを行うには、ドロワーを閉じるイベントで最後に選択したアイテム(またはそれらすべて)を選択解除する必要があります。

private int _selectedItemID = -1;

ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(this, drawer, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close)
{
    public void onDrawerClosed(View view)
    {
        super.onDrawerClosed(view);

        NavigationView navigationView = (NavigationView)view;

        Menu menu = navigationView.getMenu();

        MenuItem menuItem = menu.findItem(_selectedItemID);

        if(menuItem != null)
        {
            menuItem.setChecked(false);
        }
    }

    public void onDrawerOpened(View drawerView)
    {
        super.onDrawerOpened(drawerView);
    }
};

public boolean onNavigationItemSelected(MenuItem item)
{
    // Handle navigation view item clicks here.
    _selectedItemID  = item.getItemId();
}
0
Rusty Labs