【Android】ListViewのheadに別レイアウトを差し込む方法【kotlin】

昨日、自作Androidアプリ「TwitMorse」の改修を行ったのでその時のメモ
ユーザーさんから指摘されていたユーザープロフィール画面の問題。

ユーザー情報が多いと該当ユーザーのTweet一覧が見れないという問題があった。
小さい画面を持つ端末であれば致命的な問題だった。



前提

  • ListActivityを継承したActivityであること
  • またはListViewを使っていること

LayoutInflaterとaddHeaderViewを使う

Activity内のonCreateメソッド以降であればどこでもいいはず。
ここではListActivityを継承したActivityを例に記す。

// ListViewのheaderにプロフィール情報レイアウトをあてる
val layoutInflater: LayoutInflater = LayoutInflater.from(applicationContext) 
val headerProfile = layoutInflater.inflate(R.layout.userprofile_layout, null) // 別レイアウト

listView.addHeaderView(headerProfile) // inflateしたものをlistViewのHeaderに

// その後inflateされた別レイアウトファイルのView達が取得できるようになる
val profileName = findViewById<View>(R.id.profile_name) as TextView
.
.
.

注意点としては、

layoutInflater.inflate(R.layout.userprofile_layout, null) 

このLayoutInflator#inflateメソッドを呼ぶ前だと別レイアウトファイルのbuttonなどのインスタンスがnullになるので注意


この先頭のプロフィール情報が別レイアウトファイル(R.layout.userprofile_layoutに該当)

以上、ListViewの先頭に別レイアウトファイルを差し込む方法のメモでした。


コメントを残す

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください