1. ホーム
  2. android

[解決済み] NavigationViewのヘッダーレイアウトの取得/検索

2022-04-21 05:29:17

質問

私のNavigationViewには、アクティブなボタンを持つid 'viewId'のヘッダーレイアウトがあります。これらのボタンをセットアップするために、私はアクティビティで次のことを行います。 onPostCreate :

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

新しいバージョンのアンドロイドサポートライブラリで、( 23.1.0 が見つからない場合、null を返します。以前のバージョンではうまくいっていたのですが。バグなのでしょうか、それとも私の使い方が悪いのでしょうか?もしそうなら、どのようにヘッダーレイアウトにアクセスし、動作を追加するのでしょうか?

解決方法は?

バージョン23.1.0スイッチ NavigationView を使用するようになりました。 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に移行するまでは。