Недавно я был очень взволнован новыми захватывающими инструментами для Android. Среди них меня зацепила «Навигация». Я подумал, что это лаборатория кода было бы замечательно для начала. Тем не менее, как абсолютный новичок я нашел это немного интригующим, поскольку в нем ничего не говорилось о пошаговой настройке компонентов навигации. Поэтому я начал разбивать его на небольшие части и начинать воплощать в отдельный проект.
Код моей основной деятельности
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
setSupportActionBar(toolbar)
}
override fun onSupportNavigateUp(): Boolean =
findNavController(R.id.my_nav_host_fragment).navigateUp()
}
в моем основном макете деятельности
<fragment
android:layout_width = "match_parent"
android:layout_height = "0dp"
android:layout_weight = "1"
android:id = "@+id/my_nav_host_fragment"
android:name = "androidx.navigation.fragment.NavHostFragment"
android:navGraph = "@navigation/mobile_navigation"
android:defaultNavHost = "true"
/>
Ваша ошибка не требует пояснений
Android resource linking failed activity_main.xml:19: error: attribute android:defaultNavHost not found
Причина в том, что вы указали неправильный атрибут android:navGraph = "@navigation/mobile_navigation"
android:defaultNavHost = "true", который должен быть app:navGraph = "@navigation/mobile_navigation"
app:defaultNavHost = "true".
Если вы отредактируете эти атрибуты, вы увидите, что ваш проект успешно построен, и в вашем файле навигационного графика отображается как хост навигации по умолчанию
, надеюсь, он ответит на ваш вопрос.
Если вы уже указали правильные атрибуты; т.е.
app:navGraph = "@navigation/mobile_navigation"
app:defaultNavHost = "true"
& вы по-прежнему получаете эту ошибку, выполните следующие действия:
В Project build.gradle:
dependencies { classpath "androidx.navigation: navigation-safe-args-gradle-plugin: 2.2.1" }
В приложении build.gradle:
def nav_version = "2.2.2"
реализация "androidx.navigation: navigation-fragment-ktx: $ nav_version"
реализация "androidx.navigation: navigation-ui-ktx: $ nav_version"
Убедитесь, что вы добавили
app:startDestination = "@id/homeFragment"в свой файл navigation.xml