【发布时间】:2016-03-02 10:46:06
【问题描述】:
我有这个 android 片段:
class MainFragment: BaseFragment(){
private val recyclerView by lazy { find<RecyclerView>(R.id.recyclerView) }
private val fab by lazy { find<FloatingActionButton>(R.id.fab) }
private val myLayoutManager by lazy { LinearLayoutManager(ctx, LinearLayoutManager.VERTICAL, false) }
private val myAdapter by lazy { MainCardAdapter(ctx, ArrayList<MainCardAdapterItem>(), R.layout.card_main_item) }
override val fragmentLayout = R.layout.fragment_main_layout
val DUMMY_TEXT = "Lorem ipsum dolor sit amet, consectetur adipiscing"
)
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
val view = super.onCreateView(inflater, container, savedInstanceState)
setHasOptionsMenu(true)
return view
}
override fun onViewCreated(view: View?, savedInstanceState: Bundle?) {
Log.i("TAG", "onViewCreated")
super.onViewCreated(view, savedInstanceState)
(act as MainActivity).run { showWidgetStars(true) }
recyclerView
.linkToLayoutManager(myLayoutManager)
.linkToAdapter(myAdapter)
.addItemDecorator(removedSwipeLeftDecorator)
.setOnItemChangedDuration(500)
myAdapter.run {
setAdapterItems(dummyList)
}
}
override fun onCreateOptionsMenu(menu: Menu, inflater: MenuInflater) {
inflater.inflate(R.menu.activity_main_context, menu)
menu.findItem(R.id.action_secundary_menu).run {
isVisible = true
icon.setTintCompat(ctx, act.colorFromRes(R.color.appGreyDark))
}
super.onCreateOptionsMenu(menu, inflater)
}
override fun onOptionsItemSelected(item: MenuItem): Boolean {
when(item.itemId){
R.id.action_secundary_menu -> {
act.showSnackBar("Clicked Secondary Menu!")
return true
}
else -> return super.onOptionsItemSelected(item)
}
}
}
一切正常,除非我回到这个片段(在片段管理器中被另一个替换,添加到后台堆栈)。当我返回时,我收到一条错误消息:E/RecyclerView: No adapter attached; skipping layout。我敢打赌,这与惰性属性有关,但我不知道为什么。该片段在第一次运行时显示良好,只有在返回时才显示没有回收器视图项目并显示此消息
【问题讨论】:
-
返回fragment时能否检查
onViewCreated()是否运行? -
是的,它确实调用了它。
-
您可以尝试在 onResume 中设置您的adapterItems 吗?
-
idk 为什么,但看起来视图没有自动保存。我将 null 设置为 ondestroyview 中的适配器和布局管理器,它可以工作。
-
知道了。视图的惰性启动将指向被破坏的旧布局。
标签: android android-recyclerview kotlin