Estoy tratando de enviar información desde un fragmento a la actividad principal.

Estoy tratando de establecer un var interfaceName en un fragmento de la actividad principal.

Creé var menuInterface: MenuInterface e intenté configurarlo en onNavigationItemSelected usando myFragment.menuInterface = this

El menuInterface permanece nulo por alguna razón ... ¿alguna idea de por qué?

La 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
}
0
zion.b. 23 dic. 2019 a las 17:31

2 respuestas

Implemente MenuInterface en su actividad y elimine esta línea de su código.

feedFragment.menuInterface = this

En tu fragmento:

private lateinit var menuInterface: MenuInterface

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

override fun onDetach() {
    menuInterface = null
    super.onDetach()
}
2
rguerra 24 dic. 2019 a las 09:59

Ya he proporcionado una solución para tal pregunta. https://stackoverflow.com/a/35038574/3027124

La idea es que la comunicación entre la actividad y el fragmento debe hacerse a través de interfaces o debe implementar la arquitectura MVVM y usar el mismo modelo de vista para fragment y activity.

Recursos utiles:

0
Mustansar Saeed 23 dic. 2019 a las 15:05