私の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 つとして追加されます。つまり、すぐに呼び出すことはできないため、 にアタッチする前にレイアウト パスが必要です。RecyclerView
ListView
findViewById()
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 に移行するまで。