Фрагменты накладываются друг на друга - PullRequest
1 голос
/ 29 марта 2020

В Android Studio я запустил новый проект с «BottomNavigationView», и теперь, когда я запускаю приложение в эмуляторе, домашний фрагмент находится там по умолчанию, но затем никогда не заменяется при переключении на другой фрагмент. Вместо этого новые фрагменты заменяют друг друга, оставаясь при этом поверх первого фрагмента. Таким образом, если у меня было 3 фрагмента, фрагмент 1 остается в активности, в то время как фрагмент 1 (дубликат), фрагмент 2 и фрагмент 3 заменяют друг друга поверх фрагмента 1 (оригинал). Я не знаю, как избавиться от оригинального фрагмента или откуда он вообще исходит. Я новичок в Android разработке и обучении Kotlin, поэтому я изо всех сил пытаюсь найти предложения в Kotlin. Вот код в моей MainActivity:

package com.example.android.pointmax


import android.os.Bundle
import com.google.android.material.bottomnavigation.BottomNavigationView
import androidx.appcompat.app.AppCompatActivity
import androidx.fragment.app.Fragment
import androidx.navigation.findNavController
import androidx.navigation.ui.AppBarConfiguration
import androidx.navigation.ui.setupActionBarWithNavController
import androidx.navigation.ui.setupWithNavController
import com.example.android.pointmax.ui.home.HomeFragment
import com.example.android.pointmax.ui.recommended.RecommendedFragment
import com.example.android.pointmax.ui.wallet.WalletFragment
import timber.log.Timber


class MainActivity : AppCompatActivity() {

    private val mOnNavigationItemSelectedListener = BottomNavigationView.OnNavigationItemSelectedListener { item ->
        when (item.itemId) {
            R.id.navigation_home-> {
                val fragment = HomeFragment.newInstance()
                replaceFragment(fragment)
                return@OnNavigationItemSelectedListener true
            }
            R.id.navigation_wallet -> {
                replaceFragment(WalletFragment())
                return@OnNavigationItemSelectedListener true
            }
            R.id.navigation_recommended -> {
                replaceFragment(RecommendedFragment())
                return@OnNavigationItemSelectedListener true
            }
        }
        false
    }

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

        // Plant tree to enable Debugging with Timber
        Timber.plant(Timber.DebugTree())

        // Find the bottomNavigation bar
        val navView: BottomNavigationView = findViewById(R.id.nav_view)

        // Find the fragment that will host the different fragments
        val navController = findNavController(R.id.nav_host_fragment)

        // Passing each menu ID as a set of Ids because each
        // menu should be considered as top level destinations.
        val appBarConfiguration = AppBarConfiguration(setOf(
                R.id.navigation_home, R.id.navigation_wallet, R.id.navigation_recommended))
        setupActionBarWithNavController(navController, appBarConfiguration)
        navView.setupWithNavController(navController)

        // Set click listeners to respond to bottom navigation selections
        navView.setOnNavigationItemSelectedListener(mOnNavigationItemSelectedListener)

    }

    private fun replaceFragment(fragment: Fragment) {
        supportFragmentManager.beginTransaction()
            .replace(R.id.nav_host_fragment,fragment)
            .commit()
    }
}

MainActivity. xml - это то, как он создается по умолчанию, с constraintLayout, с bottomNavigationView и nav_host_fragment, вложенными внизу. Я очень ценю любую помощь. Заранее спасибо.

1 Ответ

0 голосов
/ 29 марта 2020

Причина, по которой вы получаете это странное поведение при навигации, заключается в том, что вы пытаетесь использовать два метода навигации одновременно

1. Компонент навигации

2. Менеджер фрагментов

При использовании Android компонента навигации Jetpack , вы должны создавать навигационные графики и использовать их для навигации между фрагментами.

Эта ссылка должна помочь вам узнать больше о навигационных графиках.

https://developer.android.com/guide/navigation/navigation-design-graph

...