将接口传递到活动片段



我正在尝试将信息从片段发送到主活动。

我正在尝试在主要活动的片段中设置var interfaceName

我创建了var menuInterface: MenuInterfaceonNavigationItemSelected尝试使用myFragment.menuInterface = this

由于某种原因,menuInterface保持为空...知道为什么吗?

onNavigationItemSelected

override fun onNavigationItemSelected(menuItem: MenuItem): Boolean {
when (menuItem.itemId) {
R.id.feedLayoutId -> {
feedFragment = FeedFragment()
feedFragment.menuInterface = this
barTitle.text = "myTitle"
supportFragmentManager
.beginTransaction()
.replace(R.id.frame_layout, feedFragment)
.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN)
.commit()
}
}
drawerLayout.closeDrawer(GravityCompat.START)
return true
}

在您的活动中实现 MenuInterface,并从代码中删除此行。

feedFragment.menuInterface = this

在您的片段中:

private var menuInterface: MenuInterface? = null
override fun onAttach(context: Context?) {
super.onAttach(context)
menuInterface = context as MenuInterface
}
override fun onDetach() {
menuInterface = null
super.onDetach()
}

我已经为这个问题提供了解决方案。 https://stackoverflow.com/a/35038574/3027124

这个想法是活动和片段之间的通信应该通过interfaces来完成,或者你应该实现MVVM架构并对fragmentactivity使用相同的视图模型。

有用的资源:

  • https://developer.android.com/training/basics/fragments/communicating
  • MVVM 概述 https://developer.android.com/jetpack/docs/guide#overview

最新更新