将接口传递给活动中的片段

时间:2019-12-23 14:31:02

标签: android kotlin

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

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

我创建了var menuInterface: MenuInterface,并尝试使用onNavigationItemSelected进行设置 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
}

2 个答案:

答案 0 :(得分:2)

在活动中添加MenuInterface,然后从您的代码中删除此行。

feedFragment.menuInterface = this

在您的片段中:

private lateinit var menuInterface: MenuInterface

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

override fun onDetach() {
    menuInterface = null
    super.onDetach()
}

答案 1 :(得分:0)

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

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

有用的资源