ナビゲーションドロワーに最後に選択したアイテムが表示され続けます。削除する方法はありますか?ユーザーがホームページにいる場合、ナビゲーションドロワーアイテムが強調表示されないようにする必要があります。
私が試してみました
drawer.setSelected(false);
onResume()で。しかし、それは助けにはなりません。
添付のスクリーンショットを参照してください。理解に役立ちます。
以下のコードを使用してください:
_navigationView.getMenu().getItem(0).setChecked(false);
_
setNavDrawer();
を呼び出した後に、このメソッドを呼び出します
getItem(int index)
メソッドはMenuItem
を取得し、そのMenuItem
でsetChecked(true);
を呼び出すことができます。あとは、どの要素を見つけるかだけです。インデックスにはデフォルトがあり、0をそのインデックスに置き換えます。
以下を呼び出すことにより、アイテムを選択(ハイライト)できます。
_onNavigationItemSelected(navigationView.getMenu().getItem(0));
_
注:ネクサス4の場合、ライブラリリビジョン24.0.0をサポートします。
navigationView.setCheckedItem(id);
の使用をお勧めします
上記のソリューションに加えて、drawer_view.xmlファイルのグループ要素に以下の属性が含まれている場合、
Android:checkableBehavior="single"
次の例に示すように:
<menu xmlns:Android="http://schemas.Android.com/apk/res/Android">
<group Android:checkableBehavior="single" >
<item
... />
<item
... />
</group>
</menu>
上記の解決策はどれも機能しません。そのため、ハイライト機能を使用したくない場合は、その属性を使用しないでください。
私が使う
_@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
オーバーライドの最後まで。
これを使って:
navigationView.getCheckedItem().setChecked(false);
@ 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);
}
}
}
Kotlinを使用している場合、これが答えです。
menuItem.isCheckable = false
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();
}