私は自分のアプリでこれを処理しました。NavigationView は、ListView をラップする ScrimInsetsFrameLayout であり、ヘッダーであるリストの最初の項目のクリックを明示的に無視 (破棄) します。
ただし、NavigationView の onItemClickListener を独自のものでラップすることで、それらを自分で取得できます。
ListView menuList = (ListView) navigationView.getChildAt(0);
final AdapterView.OnItemClickListener nativeListener = menuList.getOnItemClickListener();
menuList.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
if (position == 0) {
drawerLayout.closeDrawer(GravityCompat.START);
onUserClicked(prefs.getUser());
}
nativeListener.onItemClick(parent, view, position, id);
}
});
通常、この種の Android ウィジェットの内部構造に依存することは推奨しませんが、この場合は、アプリにパッケージ化されて出荷されるサポート ライブラリです。長い目で見れば、独自のカスタム ナビゲーション ビューを作成する方がよいでしょうが、場合によっては簡単な修正が必要になることもあります。