Skip to content Skip to sidebar Skip to footer

How To Manage Bottomnavigation From Fragment?

I'm trying to set navController to bottomNavigation, but it's requires activity, the problem is my borromNavigation hosted in fragment, so i don't have activity instance. I've trie

Solution 1:

In HomeFragment to set navController on BottomNavigationView:

import androidx.navigation.findNavController
Navigation.setViewNavController(bottom_nav_view, activity!!.findNavController(R.id.my_nav_host_fragment))

then when u want get navController from bottom_nav_view:

bottom_nav_view.findNavController()

Solution 2:

As said Artur Gniewowski, in HomeFragment in onActivityCreated I need just add

bottom_nav_view.setupWithNavController(activity!!.findNavController(R.id.my_nav_host_fragment))

So, now in HomeFragment i have:

package andy.schedulekpi.ui.fragments.home

import androidx.lifecycle.ViewModelProviders
import android.os.Bundle
import androidx.fragment.app.Fragment
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.Toast
import androidx.navigation.Navigation
import androidx.navigation.findNavController
import androidx.navigation.fragment.navArgs
import androidx.navigation.ui.setupWithNavController

import andy.schedulekpi.R
import kotlinx.android.synthetic.main.home_fragment.*

import kotlinx.android.synthetic.main.home_fragment.view.*

classHomeFragment : Fragment() {

    companionobject {
        funnewInstance() = HomeFragment()
    }

    privatelateinitvar viewModel: HomeViewModel


    val safeArgs : HomeFragmentArgs by navArgs()

    overridefunonCreateView(
        inflater: LayoutInflater, container: ViewGroup?,
        savedInstanceState: Bundle?
    ): View? {
        val view =  inflater.inflate(R.layout.home_fragment, container, false)


        return view
    }

    overridefunonActivityCreated(savedInstanceState: Bundle?) {
        super.onActivityCreated(savedInstanceState)
        viewModel = ViewModelProviders.of(this).get(HomeViewModel::class.java)
        // TODO: Use the ViewModel//Navigation.setViewNavController(bottom_nav_view, activity!!.findNavController(R.id.my_nav_host_fragment))
        bottom_nav_view.setupWithNavController(activity!!.findNavController(R.id.my_nav_host_fragment))

        Toast.makeText(this.context, safeArgs.currentWeek.toString(), Toast.LENGTH_SHORT).show()
    }

}

Thanks to Artur Gniewowski.

Post a Comment for "How To Manage Bottomnavigation From Fragment?"