【发布时间】:2021-03-25 16:53:36
【问题描述】:
我这样填充 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 时,它可以工作。该项目变为粗体。但是,我希望在将视图呈现给用户之前发生这种情况。但是当我把这段代码放在onStart,onResume,甚至onViewCreated,两者都
songs?.findViewHolderForAdapterPosition(0)
和
songs?.layoutManager?.findViewByPosition(0)
返回null。 总是。因此,在我看来,RecyclerView 尚未填充来自files 的项目。所以问题是,究竟在 Fragment 生命周期中什么时候会发生这种情况?什么时候调用上述方法是安全的?
【问题讨论】:
标签: android android-fragments android-recyclerview fragment-lifecycle