RecyclerView 在 Fragment 生命周期的什么时候准备好?

At what point in the Fragment lifecycle is a RecyclerView ready?

我这样填充 RecyclerView:

override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
    val view = inflater.inflate(R.layout.player, container, false)
    view.findViewById<RecyclerView>(R.id.songs).adapter = object: RecyclerView.Adapter<MyViewHolder>() {
        override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): MyViewHolder {
            val item = LayoutInflater.from(parent.context).inflate(R.layout.item_song, parent, false)
            return MyViewHolder(item)
        }

        override fun onBindViewHolder(holder: MyViewHolder, position: Int) {
            (holder.item as TextView).text = files[position].tag.title()
        }

        override fun getItemCount(): Int = files.size
    }
    return view
}

item_song.xml 只是一个 TextView.

现在我想把当前播放的歌曲加粗加粗:

        val songs = view?.findViewById<RecyclerView>(R.id.songs)
        
        val song = songs?.findViewHolderForAdapterPosition(0)?.itemView as TextView
        // or val song = songs?.layoutManager?.findViewByPosition(0) as TextView
        song.setTypeface(song.typeface, Typeface.BOLD)

当我将此代码放入 OnClickListener 中用于某些 Button 时,它起作用了。该项目变得大胆。但是,我希望在将视图呈现给用户之前发生这种情况。但是当我把这段代码放在 onStartonResume 甚至 onViewCreated 中时,两者都

songs?.findViewHolderForAdapterPosition(0)

songs?.layoutManager?.findViewByPosition(0)

returnnull总是。因此,在我看来,RecyclerView 尚未填充 files 中的项目。所以问题是,在 Fragment 生命周期中究竟是什么时候发生的?什么时候调用上述方法是安全的?

Now I want to make the currently playing song Bold:

第 1 步:让模型数据反映歌曲是否最新。换句话说,无论 files 是什么,都应该保存此数据。

第 2 步:让您的 onBindViewHolder() 在更新行的视图时考虑到这一点。对于每个 onBindViewHolder() 调用,根据模型数据将 TextView 更新为正常或粗体。

第 3 步:当当前播放的歌曲发生变化时,更新模型数据以反映变化,并在 RecyclerView.Adapter 上调用 notifyItemChanged() 以告知适配器这两个位置(以前-current 和 newly-current) 需要重新渲染。

Now I want to make the currently playing song Bold:

这不是一个好的解决方案。除了您目前看到的问题之外,它不适用于滚动:

  • 行得到回收,所以现在当用户滚动您的列表时,一些随机的其他歌曲是粗体的

  • 同一行不会重复用于同一位置,因此当您的用户向后滚动时,您当前播放的歌曲可能不再是粗体

So the question is, when exactly in the Fragment lifecycle does that happen?

片段生命周期与 RecyclerView 何时设置其视图之间没有关系。