web-dev-qa-db-ja.com

非表示Android子画面/フラグメントの下部ナビゲーションビュー

単一のアクティビティを作成しようとしていますAndroidアプリケーション。BottomNavigationView、3つのトップレベルフラグメント、およびいくつかの子フラグメントを持つMainActivity(アクティビティのみ)があります。画面にトップレベルが表示されているときは常に要件が必要ですフラグメント、下部ナビゲーションは切り替えが可能なように表示される必要があります。ただし、子フラグメントを表示しているときは、下部ナビゲーションを非表示にする必要があります。Navigationコンポーネントを使用してすぐに使用できる方法があるか、または可視性を変更する必要があります手動で?

11
Subhojit Shaw

AddOnDestinationChangedListenerを使用すると機能します。これは公式ドキュメントで推奨されている解決策ですが、フラグメントが添付される前にコールバックが実行されるため、ちらつきが発生します。

私は以下の答えがより柔軟で、アニメーションをよりうまく処理できると思います:

supportFragmentManager.registerFragmentLifecycleCallbacks(object : FragmentManager.FragmentLifecycleCallbacks() {
        override fun onFragmentViewCreated(fm: FragmentManager, f: Fragment, v: View, savedInstanceState: Bundle?) {
            TransitionManager.beginDelayedTransition(binding.root, Slide(Gravity.BOTTOM).excludeTarget(R.id.nav_Host_fragment, true))
            when (f) {
                is ModalFragment -> {
                    binding.bottomNavigation.visibility = View.GONE
                }
                else -> {
                    binding.bottomNavigation.visibility = View.VISIBLE
                }
            }
        }
    }, true)

フラグメント間の遷移に応じて、別のアニメーション(この例ではスライド)を選択するか、別のライフサイクルコールバックで呼び出しを行うことにより、カスタマイズできます。

0
Hicham

このコードをMainActivityに書くだけです

class MainActivity : AppCompatActivity() {

    private lateinit var navController: NavController

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


        //Getting the Navigation Controller
        navController = Navigation.findNavController(this, R.id.fragment)

        //Setting the navigation controller to Bottom Nav
        bottomNav.setupWithNavController(navController)


        //Setting up the action bar
        NavigationUI.setupActionBarWithNavController(this, navController)

        //setting the Bottom navigation visibiliy
        navController.addOnDestinationChangedListener { _, destination, _ ->

           if(destination.id == R.id.full_screen_destination ){
               bottomNav.visibility = View.GONE
           }else{
               bottomNav.visibility = View.VISIBLE
           }


        }

    }

Android開発者ドキュメント: NavigationUIを使用してUIコンポーネントを更新する から詳細を取得します)==

0
Amina Bekir