后kotlin android片段空回收站视图
我有这个android片段:
class MainFragment: BaseFragment(){ private val recyclerView by lazy { find(R.id.recyclerView) } private val fab by lazy { find(R.id.fab) } private val myLayoutManager by lazy { LinearLayoutManager(ctx, LinearLayoutManager.VERTICAL, false) } private val myAdapter by lazy { MainCardAdapter(ctx, ArrayList(), 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
E/RecyclerView: No adapter attached; skipping layout
。 我敢打赌,它与懒惰属性有关,但我不明白为什么。 该片段在第一次运行时显示良好,只有在返回时才显示没有回收器视图项目并显示该消息
所以当我的属性被声明为lazy { find
,这基本上意味着它们只会从布局中被夸大一次。如果片段的视图需要重新创建,recyclerview属性将指向以旧观点。
我不知道这种情况下如何抛出空指针exception。 只需将lazy更改为var
,然后将其重新分配给onCreateView
。 另一件事,如果我们想要使用相同的LayoutManager
为新的充气recyclerview,我们必须清除它从以前的recyclerview recyclerView.layoutManager = null
,否则,将抛出一个exception,说这个layoutManager
器已经绑定到另一个recyclerView。
- 如何解决Gradle的DexArchiveBuilderException?
- 让Snackbar向上推视图
- EditText和TextInputLayout以编程方式添加不采摘风格,不显示软键盘
- 无法转换为org.jetbrains.kotlin.java.model.types.JeClassInitializerExecutableTypeMirror
- 运行时错误使用ListView Android与Kotlin?
- 如何在多模块gradle项目中提供测试数据和类
- 在Room数据库库中将Enum作为主键时出错
- 如何在kotlin的Grid View和List View之间使用setOnclickListener
- Android半透明状态栏与倒置图标