我的列表僅顯示單行數據,即使預期的4行通過ViewHolder
。RecyclerView與Kotlin不垂直佈局單元格
RecyclerView
,RecyclerView.Adapter
和RecyclerView.ViewHolder
都按我所期望的AFAICT工作。我看到正確的4行數據通過綁定函數傳遞。但是,我只在列表中看到一行。就好像LinearLayoutManager
沒有正確放置垂直方向的單元格。我不確定錯過了什麼。
class SongListFragment : Fragment() {
private lateinit var mediaProvider:MediaProvider
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
mediaProvider = MediaLibraryTestSongProvider()
}
override fun onCreateView(inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?): View? {
//TODO: how to inflate fragment using Kotlin extension?
val songListView = inflater.inflate(R.layout.fragment_song_list, container, false)
val songListRecyclerView = songListView.songListRecyclerView
songListRecyclerView.layoutManager = LinearLayoutManager(activity)
songListRecyclerView.adapter = SongListCellAdapter(mediaProvider.getSongs())
return songListView
}
private inner class SongListCellAdapter(val songList:List<Song>) : RecyclerView.Adapter<SongListCellHolder>()
{
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) : SongListCellHolder {
val inflater = LayoutInflater.from(activity)
val songCellView = inflater.inflate(R.layout.cell_song_list,parent,false)
val holder = SongListCellHolder(songCellView)
return holder
}
override fun onBindViewHolder(holder: SongListCellHolder, position: Int) {
holder.bind(songList[position])
}
override fun getItemCount(): Int {
return songList.size
}
}
private inner class SongListCellHolder(itemView:View) : RecyclerView.ViewHolder(itemView)
{
fun bind(song:Song) = with(itemView) {
songTitle.text = song.title
songArtist.text = song.artist
}
}
}
是的,這是Kotlin擴展的語法。它取代了正常的findViewById()調用。 –