탐색 UI를 사용 하고 샘플 앱 NavigationAdavancedSampleBottomNavigationView 과 FragmentContainerView유사한 하단 앱바 탐색을 만듭니다 .
참고 NavigationAndvancedSample 응용 프로그램은과 동일한 구현을 사용하는 표시되지 않습니다 문서 는 사용자 정의 확장 방법을 사용하여 해결의 구현이로 setupWithNavController.
널은 NavHostFragment를 만들 때 BottomNavigationView에 MainActivity.kt A를 FragmentContainerView.
재현 가능한 오류 및 전체 코드 샘플은 BottomNavigationViewSample 저장소 에서 사용할 수 있습니다 .
2020-05-15 12 : 39 : 19.117 18747-18747 / com.example.bottomnavigationviewsample E / AndroidRuntime : FATAL EXCEPTION : main Process : com.example.bottomnavigationviewsample, PID : 18747 java.lang.RuntimeException : Unable to start activity ComponentInfo { com.example.bottomnavigationviewsample / com.example.bottomnavigationviewsample.MainActivity} : kotlin.TypeCastException : null은 null이 아닌 유형 androidx.navigation.fragment.NavHostFragment로 캐스트 될 수 없습니다. android.app.ActivityThread.performLaunchActivity (ActivityThread.java:3270) at android.app.ActivityThread.handleLaunchActivity (ActivityThread.java:3409) at android.app.servertransaction.LaunchActivityItem.execute (LaunchActivityItem.java:83) at android. app.servertransaction.TransactionExecutor.executeCallbacks (TransactionExecutor.java:135) at android.app.servertransaction.TransactionExecutor.execute (TransactionExecutor.java:95) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2016) at android.os.Handler.dispatchMessage(Handler.java:107) at android.os.Looper.loop(Looper.java:214) at android.app.ActivityThread.main(ActivityThread.java:7356) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.RuntimeInit$com.android.internal.os.ZygoteInit.main (ZygoteInit.java:930)의 MethodAndArgsCaller.run (RuntimeInit.java:492) 원인 : kotlin.TypeCastException : null은 null이 아닌 유형의 androidx.navigation.fragment로 캐스트 될 수 없습니다. .NavHostFragment at com.example.bottomnavigationviewsample.MainActivity.onCreate (MainActivity.kt : 16) at android.app.Activity.performCreate (Activity.java:7802) at android.app.Activity.performCreate (Activity.java:7791) at android.app.ActivityThread.performLaunchActivity (ActivityThread.java:3245)의 android.app.Instrumentation.callActivityOnCreate (Instrumentation.java:1299) at android.app.ActivityThread.handleLaunchActivity (ActivityThread.java:3409) at android.app.servertransaction .LaunchActivityItem.execute (LaunchActivityItem.java:83) at android.app.servertransaction.TransactionExecutor.executeCallbacks (TransactionExecutor.java:135) at android.app.servertransaction.TransactionExecutor.execute (TransactionExecutor.java:95) at android.app. ActivityThread$H.handleMessage(ActivityThread.java:2016) at android.os.Handler.dispatchMessage(Handler.java:107) at android.os.Looper.loop(Looper.java:214) at android.app.ActivityThread.main(ActivityThread.java:7356) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.RuntimeInit$com.android.internal.os.ZygoteInit.main (ZygoteInit.java:930) 2020-05-15 12 : 39 : 19.132 18747-18747 / com.example.bottomnavigationviewsample I /에서 MethodAndArgsCaller.run (RuntimeInit.java:492) 프로세스 : 신호를 보내는 중입니다. PID : 18747 SIG : 9
첫 번째보기 home.xml에 대한 탐색 그래프를 만들어 app> res> navigationBottomNavigationView 아래 에 표시합니다 .
ㅏ. 프로젝트 종속성 추가를 묻는 메시지가 나타나면 확인을 선택 합니다.
비. 추가 kotlinOptions { jvmTarget = '1.8' }로 : (someAppModule) build.gradle 인라인 바이트 코드를 사용하려면 AppBarConfiguration.
씨. home.xml 에 조각을 추가 하여 BottomNavigationView.
home.xml
<?xml version="1.0" encoding="utf-8"?>
<navigation 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:id="@+id/home"
app:startDestination="@id/homeFragment">
<fragment
android:id="@+id/homeFragment"
android:name="com.example.bottomnavigationviewsample.HomeFragment"
android:label="fragment_home"
tools:layout="@layout/fragment_home" />
</navigation>
build.gradle
apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-android-extensions'
android {
compileSdkVersion 29
buildToolsVersion "29.0.3"
kotlinOptions { jvmTarget = '1.8' }
defaultConfig {
applicationId "com.example.bottomnavigationviewsample"
minSdkVersion 21
targetSdkVersion 29
versionCode 1
versionName "1.0"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
}
}
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
implementation 'androidx.appcompat:appcompat:1.1.0'
implementation 'androidx.core:core-ktx:1.2.0'
implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
testImplementation 'junit:junit:4.12'
androidTestImplementation 'androidx.test.ext:junit:1.1.1'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0'
implementation 'androidx.navigation:navigation-fragment-ktx:2.2.2'
implementation 'androidx.navigation:navigation-ui-ktx:2.2.2'
}
에 대한 메뉴 만들기 BottomNavigationView, bottom_nav.xml을 아래 응용 프로그램> 고해상도> 메뉴 .
ㅏ. 메뉴 id및 title.
비. 메뉴에 벡터 드로어 블을 추가합니다 icon.
bottom_nav.xml
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:id="@+id/home"
android:icon="@drawable/ic_home_black_24dp"
android:contentDescription="@string/cd_home"
android:title="@string/title_home" />
</menu>
FragmentContainerView및 BottomNavigationView에 MainActivity.kt 의 activity_main.xml의 레이아웃입니다.activity_main.xml
<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_container"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1" />
<com.google.android.material.bottomnavigation.BottomNavigationView
android:id="@+id/bottom_nav"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:menu="@menu/bottom_nav"/>
</LinearLayout>
MainActivity.ktBottomNavigationView 에서 활성화하십시오 .
ㅏ. 만듭니다 AppBarConfiguration. 참조 : NaviationUI> AppBarConfiguration으로 UI 구성 요소 업데이트
비. 만들기 NavHostFragment와 NavController. 참조 : findNavController를 사용 하는 FragmentContainerView 용 StackOverflow 솔루션
씨. 작업 표시 줄 탐색을 설정합니다.
디. BottomNavigationView탐색을 설정합니다 . 참조 : NavigationUI로 UI 구성 요소 업데이트> 하단 탐색
MainActivity.kt
package com.example.bottomnavigationviewsample
import android.os.Bundle
import androidx.appcompat.app.AppCompatActivity
import androidx.navigation.fragment.NavHostFragment
import androidx.navigation.ui.AppBarConfiguration
import androidx.navigation.ui.setupActionBarWithNavController
import androidx.navigation.ui.setupWithNavController
import kotlinx.android.synthetic.main.activity_main.*
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
val appBarConfiguration = AppBarConfiguration(setOf(R.id.home))
val navHostFragment = supportFragmentManager.findFragmentById(R.id.nav_host_container) as NavHostFragment
val navController = navHostFragment.navController
setupActionBarWithNavController(navController, appBarConfiguration)
bottom_nav.setupWithNavController(navController)
}
}
설명서에 설명 된대로 NavControllerwith findNavController(R.id.nav_host_container)를 만듭니다 .
구현 fragment보기 대신 FragmentContainerView에 activity_main.xml을 .
activity_main.xml
<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">
<fragment
android:id="@+id/nav_host_container"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1" />
<com.google.android.material.bottomnavigation.BottomNavigationView
android:id="@+id/bottom_nav"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:menu="@menu/bottom_nav"/>
</LinearLayout>
BottomNavigationView메뉴 항목에 대한 상위 탐색 그래프를 추가하십시오 .전체 샘플 코드는 BottomNavigationSample에 포함되어 있습니다 .
이는 하나의 상위 탐색 그래프와 각 메뉴 항목에 대한 중첩 된 탐색 그래프로 수행 할 수 있습니다. 중첩 된 탐색 그래프는 각 하위 흐름이 중첩 된 그래프 내에서 구성 될 수 있기 때문에 좋습니다.
main.xml
<?xml version="1.0" encoding="utf-8"?>
<navigation xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/main"
app:startDestination="@id/home">
<include app:graph="@navigation/home" />
<include app:graph="@navigation/saved" />
</navigation>
navGraph에를 FragmentContainerView.activity_main.xml
<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_container"
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/main"/>
<com.google.android.material.bottomnavigation.BottomNavigationView
android:id="@+id/bottom_nav"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:menu="@menu/bottom_nav" />
</LinearLayout>
BottomNavigationView 에서 활성화하십시오 .import android.os.Bundle
import androidx.appcompat.app.AppCompatActivity
import androidx.navigation.fragment.NavHostFragment
import androidx.navigation.ui.AppBarConfiguration
import androidx.navigation.ui.setupActionBarWithNavController
import androidx.navigation.ui.setupWithNavController
import kotlinx.android.synthetic.main.activity_main.*
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
val appBarConfiguration = AppBarConfiguration(setOf(R.id.home, R.id.saved))
val navHostFragment = supportFragmentManager.findFragmentById(R.id.nav_host_container) as NavHostFragment
val navController = navHostFragment.navController
setupActionBarWithNavController(navController, appBarConfiguration)
bottom_nav.setupWithNavController(navController)
}
}
나도이 문제가 있었다. 내 실수는 내비게이션 파일의 내비게이션 태그에 올바른 ID를 입력하지 않은 것입니다. ID는 메뉴 항목의 ID와 동일해야합니다.
탐색 파일 (navigation / home.xml) :
<navigation
android:id="@+id/home" ... >
메뉴 파일 (menu / bottom_nav.xml)에서 :
<item
android:id="@+id/home" ... />
Jana Duggar는 사랑에 대한 그녀의 검색에 대해 공개했습니다. 다음은 그녀가 결혼을 위한 5년 창구와 주제에 대해 말한 모든 것입니다.
'아웃랜더'의 스타 샘 흑한은 최근 자신을 스타로 만든 역할인 제이미 프레이저를 기억하기 위해 세트장에서 무엇을 할 것인지를 밝혔다.
'She Loves You'는 한 시간 만에 작곡되고 하루 만에 녹음되었으며, 비틀즈의 경력 중 최고의 공연 중 하나인 비틀즈의 노래였습니다.
Dolly Parton과 그녀의 할머니 Bessie는 특별한 관계를 가졌습니다. Parton 할머니는 매우 아팠지만 Dolly는 그녀에게 장난을 쳤습니다.
통통한 배, 장난기 어린 눈, 일본 정원에 돌 조각상으로 나타나는 습관을 가진 타누키는 신화와 현실의 경계를 모호하게 만듭니다.
바다는 아름다움으로 가득하지만, 지구상에서 가장 무서운 바다 생물들도 숨어 있습니다. 이 동물들 중 다수는 해수면 아래, 어둡고 압력이 높은 심해에 숨어 있습니다.
적대적인 몹과 싸우거나 PvP 시나리오에 대비하고 있다면, 마인크래프트에서 제공하는 최고의 검 마법 부여를 아는 것이 큰 도움이 될 수 있습니다. 검에 마법을 부여하면 더 큰 피해를 입히고, 몹 드랍률을 높이고, 검의 내구도를 연장할 수 있습니다.
Eyes of Wakanda는 MCU에 직접 연결되며 X-Men '97, What If..., Daredevil 등에 대한 업데이트도 제공됩니다.
1988년부터 미국판 보그에 합류한 오랜 편집장은 6월 26일 목요일 아침 직원 회의에서 이 소식을 발표했습니다.
케이트 미들턴의 약혼 반지는 윌리엄 왕자가 프로포즈하기 전에 다이애나 공주의 소유였던 것으로 유명합니다. 이 역사적인 작품에 대한 모든 정보를 여기에서 확인하세요.
'라구나 비치'는 2000년대 중반 고등학생 Lauren Conrad, Kristin Cavallari, Stephen Colletti 등의 삶을 따라갔습니다. MTV 리얼리티 시리즈의 출연진이 현재 있는 곳은 다음과 같습니다.
전직 목장주이자 현상금 사냥꾼인 도그와 결혼한 프랜시 프랜에 대한 모든 정보를 소개합니다.
너무 자주 그렇듯 갑자기 와닿는다 다시 중간쯤이야 <아니, 태평양에 있는 사람 말고 마룬, 카니발에 있는 사람> 모든 헤드라인이 시끄러워…..
2022년에는 GPT-3가 출시되면서 글쓰기 능력이 덜 중요해진 것 같습니다. AI를 사용하면 글이 서투른 사람들도 양질의 직원을 생성할 수 있습니다.
오늘날과 같이 급변하고 경쟁이 치열한 세상에서 경력은 개인의 성장, 재정적 안정 및 전반적인 삶의 만족도에 중요한 역할을 합니다. 그러나 많은 사람들은 침체와 불만족의 끊임없는 순환에 휩싸여 직업 생활에서 점차 쇠퇴하고 있습니다.
지난 주에 저는 PressGazette(영국 언론 뉴스 웹사이트)를 통해 발송된 보도 자료를 보았습니다. 이 기사는 Scandi 팟캐스트 호스팅 및 광고 회사인 Acast가 팟캐스팅에서 "아마도 가장 영향력 있는" 게시자 컨소시엄을 이끌 것이라고 발표했습니다.