NavigationView ヘッダーレイアウトの取得/検索 質問する

NavigationView ヘッダーレイアウトの取得/検索 質問する

私のNavigationViewには、アクティブなボタンを持つID「viewId」のヘッダーレイアウトがあります。これらのボタンを設定するには、アクティビティで次の操作を行いますonPostCreate

final View panel = findViewById(R.id.viewId);
panel.setOnClickListener(new View.OnClickListener() {
... setup goes here ...
});

新しいバージョンのAndroidサポートライブラリでは、(23.1.0) の場合、ビューが見つからないため、null が返されます。以前のバージョンでは正常に動作していました。これはバグでしょうか、それともこの機能の使い方が間違っているのでしょうか? もしそうなら、ヘッダー レイアウトにアクセスして動作を追加するにはどうすればよいでしょうか?

ベストアンサー1

バージョン 23.1.0 では、(以前の ではなく)NavigationViewを使用するように切り替わり、ヘッダーがそれらの要素の 1 つとして追加されます。つまり、すぐに呼び出すことはできないため、 にアタッチする前にレイアウト パスが必要です。RecyclerViewListViewfindViewById()NavigationView

のためにバージョン 23.1.1サポート ライブラリの を使用すると、次の方法でヘッダー ビューへの参照を取得できるようになりましたgetHeaderView()

View headerLayout = navigationView.getHeaderView(0); // 0-index header

これには、XML およびコード経由で追加されたヘッダーを処理できるという利点があります。

23.1.0をまだ使用している場合は、関連するバグコード内でヘッダーを膨張させて、findViewById()それを使用することができます:

View headerLayout = 
    navigationView.inflateHeaderView(R.layout.navigation_header);
panel = headerLayout.findViewById(R.id.viewId);
// panel won't be null

23.1.1 に移行するまで。

おすすめ記事