gpt4 book ai didi

android - 返回后的 kotlin android fragment 空回收器 View

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:21:20 26 4
gpt4 key购买 nike

我有这个安卓 fragment :

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)
}
}
}

一切正常,除了在我回到这个 fragment 之后(在 fragment 管理器中被另一个替换,添加到后台)。当我返回时,我收到一条错误消息:E/RecyclerView: No adapter attached;跳过布局。我敢打赌,这与惰性属性有关,但我不明白为什么。该 fragment 在第一次运行时显示良好,只有在返回时才显示没有回收站 View 项目并显示此消息

最佳答案

因为我的属性被声明为 lazy { find<View>(R.id.xxx}这基本上意味着它们只会从布局中膨胀一次。如果 fragment 的 View 需要以某种方式再次创建,则 recyclerview 属性将指向旧 View 。

我不确定在那种情况下如何不抛出空指针异常。只需将 lazy 更改为 var , 并在 onCreateView 上重新分配它.另一件事,如果我们想使用相同的 LayoutManager对于新的膨胀的 recyclerview,我们必须从以前的 recyclerview 中清除它 recyclerView.layoutManager = null ,否则,将抛出一个异常,表明 layoutManager已经绑定(bind)到另一个 recyclerView。

关于android - 返回后的 kotlin android fragment 空回收器 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35744969/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com