Я хочу использовать новый график навигации и BottomNavigationView
. Я получил следующие зависимости:
// Navigation
implementation "androidx.navigation:navigation-fragment-ktx:$navVersion"
implementation "androidx.navigation:navigation-ui-ktx:$navVersion"
implementation "androidx.fragment:fragment:1.2.2"
// Material
implementation "com.google.android.material:material:$materialVersion"
обратите внимание на implementation "androidx.fragment:fragment:1.2.2"
, который должен исправить ошибку, возникающую при FragmentContainerView
, не отображаемом в качестве хоста на графике навигации.
Вот моя простая навигация graph:
![enter image description here](https://i.stack.imgur.com/w1brs.png)
Первое, что вы можете увидеть здесь, это то, что ничто не отображается в качестве хоста, хотя я добавил зависимость, которая должна это исправить.
Макет моей основной деятельности:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".MainActivity">
<androidx.fragment.app.FragmentContainerView
android:id="@+id/nav_host_fragment"
android:name="androidx.navigation.fragment.NavHostFragment"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
app:defaultNavHost="true"
app:navGraph="@navigation/navigation_graph" />
<com.google.android.material.bottomnavigation.BottomNavigationView
android:id="@+id/bottom_navigation"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="?colorPrimary"
app:itemIconTint="@drawable/menu_navigation"
app:itemTextColor="@drawable/menu_navigation"
app:menu="@menu/menu_navigation" />
</LinearLayout>
и моя основная деятельность kotlin файл:
class MainActivity : AppCompatActivity() {
private var navController: NavController? = null
private var appBarConfiguration: AppBarConfiguration? = null
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
navController =
(supportFragmentManager.findFragmentById(R.id.nav_host_fragment) as NavHostFragment).navController
appBarConfiguration = AppBarConfiguration.Builder(
setOf(
R.id.main_fragment,
R.id.recycler_fragment,
R.id.map_fragment
)
).build()
setupActionBar()
setupBottomNavigationMenu()
}
private fun setupActionBar() {
NavigationUI.setupActionBarWithNavController(
this,
navController!!,
appBarConfiguration!!
)
}
private fun setupBottomNavigationMenu() {
bottom_navigation?.let {
NavigationUI.setupWithNavController(it, navController!!)
}
}
override fun onCreateOptionsMenu(menu: Menu?): Boolean {
menuInflater.inflate(R.menu.menu_toolbar, menu)
return true
}
override fun onOptionsItemSelected(item: MenuItem): Boolean {
val navigated = NavigationUI.onNavDestinationSelected(item, navController!!)
return navigated || super.onOptionsItemSelected(item)
}
}
Здесь у нас также есть мое меню и панель инструментов:
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools">
<item
android:id="@+id/destination_home"
android:icon="@drawable/ic_home"
android:title="@string/home"
tools:layout="@layout/fragment_main" />
<item
android:id="@+id/destination_recycler"
android:icon="@drawable/ic_list"
android:title="@string/recycler"
tools:layout="@layout/fragment_recycler" />
<item
android:id="@+id/destination_map"
android:icon="@drawable/ic_map"
android:title="@string/map"
tools:layout="@layout/fragment_map" />
</menu>
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<item
android:id="@+id/destination_settings"
android:icon="@drawable/ic_settings"
android:title="@string/settings"
app:showAsAction="ifRoom" />
</menu>
Когда я сейчас запускаю приложение, я ожидал бы следующее поведение:
- Приложение запускается и показывает фрагмент с текстом «Home»
- В приложении не будет отображаться кнопка «Назад» на панели инструментов
- При переходе от «Домой» к «Карта» на панели инструментов не будет отображаться кнопка «Назад» на панели инструментов
- При переходе с «» В главном меню «Настройки» на панели инструментов будет отображаться кнопка «Назад» на панели инструментов
- Когда я вернуться назад из «Настройки» должен появиться экран «Домой»
- При переходе от «Карта» к «Настройки» на панели инструментов будет отображаться кнопка «Назад» на панели инструментов
- Когда я вернусь назад из «Настройки» должен появиться экран «Карта»
Что на самом деле происходит:
- Приложение запускается и показывает фрагмент с текстом «Домой»
- Приложение показывает кнопку «Назад» на панели инструментов
- Когда я перемещаюсь от «Домой» к «Карте», на панели инструментов отображается кнопка «Назад» на панели инструментов
- Когда я перемещаюсь от » В главном меню «Настройки» на панели инструментов отображается кнопка «Назад» на панели инструментов
- Когда я возвращаюсь назад из «Настройки», появляется экран «Домой»
- Когда я перемещаюсь от «Карта» к « Настройки »на панели инструментов отображается кнопка« Назад »на панели инструментов
- Когда я возвращаюсь назад из« Настройки », вместо« Карта »появляется экран« Домой »
Так что что-то действительно запутано здесь с навигацией, и я понятия не имею, как х это.