Home > Enterprise >  Need Help in Kotlin Android - fragments
Need Help in Kotlin Android - fragments

Time:09-25

I need to get session id to menu fragment. but it doesn't work. In this I get Session ID from Login Activity. Now I need to get that id to Menu fragment. In this one activity loaded five Fragments. I used bundle for load data. Here's my activity.kt

class Home : AppCompatActivity() {
    private val HomeFragment = HomeFragment()
    private val CreditsFragment = CreditsFragment()
    private val BusFragment = BusFragment()
    private val NotificationsFragment = NotificationsFragment()
    private val MenuFragment = MenuFragment()

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.home)

         val sessionId = intent.getStringExtra("EXTRA_SESSION_ID")
        textView4.setText(sessionId)

        replaceFragment(HomeFragment)

        bottomNavBar.setOnNavigationItemSelectedListener{
            when (it.itemId){
                R.id.menu_home -> replaceFragment(HomeFragment)
                R.id.menu_credits -> replaceFragment(CreditsFragment)
                R.id.menu_bus -> replaceFragment(BusFragment)
                R.id.menu_notification -> replaceFragment(NotificationsFragment)
                R.id.menu_menu -> replaceFragment(MenuFragment)
            }
            true
        }

        val bundle = Bundle()
        bundle.putString("EXTRA_SESSION_ID", sessionId)
        val myObj = MenuFragment()
        myObj.setArguments(bundle)
    }


    private fun replaceFragment (fragment:Fragment){
        val transaction = supportFragmentManager.beginTransaction()
        transaction.replace(R.id.fragment_container, fragment);
        transaction.addToBackStack(null);
        transaction.commit();
    }



}

here's my menu fragment.kt

class MenuFragment : Fragment() {
   
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)

        if (getArguments() != null) {
            emailAddress.setText(getArguments()?.getString("EXTRA_SESSION_ID"))
        }

    }

CodePudding user response:

The MenuFragment instance you have in your replaceFragment transaction is different from the one where you set the sessionid argument to.

Remove the other instantiation val myObj = MenuFragment() and set arguments on MenuFragment instead.

(Naming convention hint: it's easier to keep types and objects apart if types are CamelCase and types lowerCamelCase. For example, private val menuFragment = MenuFragment().)

CodePudding user response:

change it to this :

    val bundle = Bundle()  
    bundle.putString("EXTRA_SESSION_ID", sessionId)
    MenuFragment.setArguments(bundle)
    bottomNavBar.setOnNavigationItemSelectedListener{
        when (it.itemId){
            R.id.menu_home -> replaceFragment(HomeFragment)
            R.id.menu_credits -> replaceFragment(CreditsFragment)
            R.id.menu_bus -> replaceFragment(BusFragment)
            R.id.menu_notification -> replaceFragment(NotificationsFragment)
            R.id.menu_menu -> replaceFragment(MenuFragment)
        }
        true
    }

and don't use names with first upper case letters, it makes code hard to read.

  • Related