Listview 带有Kotlin的RecyclerView未垂直布置单元

Listview 带有Kotlin的RecyclerView未垂直布置单元,listview,android-recyclerview,kotlin,Listview,Android Recyclerview,Kotlin,我的列表仅显示一行数据,即使预期的4行通过ViewHolder RecyclerView,RecyclerView.Adapter,以及RecyclerView.ViewHolder都能正常工作。我看到正确的4行数据通过bind函数。但是,我在列表中只看到一行。这就好像LinearLayoutManager没有在垂直方向上正确布局单元格一样。我不确定错过了什么 class SongListFragment : Fragment() { private lateinit var media

我的列表仅显示一行数据,即使预期的4行通过
ViewHolder

RecyclerView
RecyclerView.Adapter
,以及
RecyclerView.ViewHolder
都能正常工作。我看到正确的4行数据通过bind函数。但是,我在列表中只看到一行。这就好像
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
        }
    }

}
class-SongListFragment:Fragment(){
私有lateinit var mediaProvider:mediaProvider
重写创建时的乐趣(savedInstanceState:Bundle?){
super.onCreate(savedInstanceState)
mediaProvider=MediaLibraryTestSongProvider()
}
override fun onCreateView(充气机:布局充气机,
容器:视图组?,
savedInstanceState:捆绑?:查看{
//TODO:如何使用Kotlin extension膨胀碎片?
val songListView=充气机。充气(R.layout.fragment\u song\u列表,容器,false)
val songListRecyclerView=songListView.songListRecyclerView
songListRecyclerView.layoutManager=LinearLayoutManager(活动)
songListRecyclerView.adapter=SongListCellAdapter(mediaProvider.getSongs())
返回歌曲列表视图
}
私有内部类SongListCellAdapter(val songList:List):RecyclerView.Adapter()
{
override fun onCreateViewHolder(父级:ViewGroup,viewType:Int):SongListCellHolder{
val充气机=充气机从(活动)
val songCellView=充气机。充气(R.layout.cell_song_列表,父项,false)
val holder=SongListCellHolder(songCellView)
报税表持有人
}
覆盖BindViewHolder(holder:SongListCellHolder,位置:Int){
持有者绑定(歌曲列表[位置])
}
重写getItemCount():Int{
return songList.size
}
}
私有内部类SongListCellHolder(itemView:View):RecyclerView.ViewHolder(itemView)
{
趣味绑定(歌曲:歌曲)=与(项目视图){
songTitle.text=song.title
songArtist.text=song.artist
}
}
}

问题很简单(一旦你知道答案)。我的单元格布局,
cell\u song\u list
具有
layout\u height=“match\u content”
,这导致每个单元格都是屏幕的大小。其他人在那里,但在屏幕外,在模拟器上,我没有滚动到注意到

作为记录,这里是我对单元格的更正布局,顶层的
LinearLayout
使用
layout\u height=“wrap\u content”
,因此单元格大小正确

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="wrap_content">

    <TextView
        android:id="@+id/songTitle"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="TextView"
        android:textAppearance="@style/TextAppearance.AppCompat.Title"
        tools:text="Title" />

    <TextView
        android:id="@+id/songArtist"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="Artist"
        android:textAppearance="@style/TextAppearance.AppCompat.Caption" />
</LinearLayout>


是的,这是Kotlin扩展的语法。它取代了普通的findViewById()调用,这是一个非常常见的错误。