我刚刚编译了我的代码,当我尝试启动应用程序时,我收到了错误消息。我目前正在尝试为我的班级项目设置 RecycleView。我的目标是让 RecycleView 显示类似于 reddit 移动应用程序的内容。我以为我的名为“scrollview1”的 RecycleView 有一个导航控制器设置。不知道为什么我得到这个输出
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.john.chanapi/com.john.chanapi.MainActivity}: java.lang.IllegalStateException: Activity com.john.chanapi.MainActivity@1850938 does not have a NavController set on 2131230866
Run Code Online (Sandbox Code Playgroud)
我的 MainActivity.kt:
package com.john.chanapi
import android.os.Bundle
import com.google.android.material.floatingactionbutton.FloatingActionButton
import com.google.android.material.snackbar.Snackbar
import androidx.navigation.findNavController
import androidx.navigation.ui.AppBarConfiguration
import androidx.navigation.ui.navigateUp
import androidx.navigation.ui.setupActionBarWithNavController
import androidx.navigation.ui.setupWithNavController
import androidx.drawerlayout.widget.DrawerLayout
import com.google.android.material.navigation.NavigationView
import androidx.appcompat.app.AppCompatActivity
import androidx.appcompat.widget.Toolbar
import android.view.Menu
import android.view.View
class MainActivity : AppCompatActivity() {
private lateinit var appBarConfiguration: AppBarConfiguration
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
val toolbar: Toolbar = findViewById(R.id.toolbar)
setSupportActionBar(toolbar) …
Run Code Online (Sandbox Code Playgroud) 我正在使用Android导航组件进行导航.我有一个LoginFragment,它有一个按钮可以转换到SignUpFragment.单击按钮我收到此错误.
java.lang.IllegalStateException: View android.support.v7.widget.AppCompatButton{49d9bd1 VFED..C.. ...P.... 201,917-782,1061 #7f090172 app:id/signUpLink} does not have a NavController set
Run Code Online (Sandbox Code Playgroud)
这是我的nav_graph.xml
<navigation xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
app:startDestination="@id/loginFragment">
<fragment
android:id="@+id/loginFragment"
android:name="org.fossasia.openevent.app.core.auth.login.LoginFragment"
android:label="login_fragment"
tools:layout="@layout/login_fragment">
<action
android:id="@+id/action_loginFragment_to_signUpFragment"
app:destination="@id/signUpFragment" />
</fragment>
</navigation>
Run Code Online (Sandbox Code Playgroud)
以下是LoginFragment for Navigation中的代码 -
binding.signUpLink.setOnClickListener(Navigation.createNavigateOnClickListener(R.id.action_loginFragment_to_signUpFragment, null));
Run Code Online (Sandbox Code Playgroud)
以下是NavHostFragment的活动布局文件的摘录 -
<FrameLayout
android:id="@+id/fragment_container"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layout_behavior="@string/appbar_scrolling_view_behavior"
android:name="android.navigation.fragment.NavHostFragment"
app:navGraph="@navigation/main_navigation"
app:defaultNavHost="true"/>
Run Code Online (Sandbox Code Playgroud) android android-architecture-components android-architecture-navigation
我有底部导航,我也<fragment>
用FragmentContainerView
它替换了标签,这给了我关于它没有设置 NavController 的错误,然后我发布了这个问题并解决了这个问题,但是当方向改变并选择项目时,我得到了以下错误在底部导航
java.lang.IllegalStateException: 在调用 getGraph() 之前必须先调用 setGraph()
片段容器
<androidx.fragment.app.FragmentContainerView
android:id="@+id/nav_host_fragment"
android:name="androidx.navigation.fragment.NavHostFragment"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:defaultNavHost="true"
app:navGraph="@navigation/mobile_navigation" /
Run Code Online (Sandbox Code Playgroud)
寻找片段
val navHostFragment = supportFragmentManager.findFragmentById(R.id.nav_host_fragment) as NavHostFragment
val navController = navHostFragment.navController
// 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_classes, R.id.navigation_schedule, R.id.navigation_settings
)
)
setupActionBarWithNavController(navController, appBarConfiguration)
navView.setupWithNavController(navController)
Run Code Online (Sandbox Code Playgroud) android orientation-changes android-fragments bottomnavigationview
我尝试编写一个 Android 应用程序,它使用 androidx 中的导航组件、工具栏和抽屉布局来从左侧滑入设置菜单。我按照导航组件入门指南进行操作,并尝试使用本指南使用 NavigationUI 更新 UI 组件来添加顶部应用栏和设置。
当我的应用程序启动时,会引发以下异常:
java.lang.IllegalStateException: Activity ....MainActivity@e686cd8 does not have a NavController set on 2131230993
Run Code Online (Sandbox Code Playgroud)
旁注:如果我nav_graph.xml
在设计模式下打开,主机窗格会报告“未找到 NavHostFragments。必须从布局中的 NavHostFragment 引用此导航图才能访问。” 也许这个错误和异常是相关的并且具有相同的根本原因。然而,我的导航图被一个虽然引用NavHostFragment
,见下文。
活动_main.xml:
<?xml version="1.0" encoding="utf-8"?>
<androidx.drawerlayout.widget.DrawerLayout 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/drawer_layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="true"
tools:context=".MainActivity">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<androidx.appcompat.widget.Toolbar
android:id="@+id/main_toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:background="?attr/colorPrimary"
android:theme="?attr/actionBarTheme" />
<androidx.fragment.app.FragmentContainerView
android:id="@+id/nav_host_fragment"
android:name="androidx.navigation.fragment.NavHostFragment"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:defaultNavHost="true"
app:navGraph="@navigation/nav_graph" />
</LinearLayout>
<com.google.android.material.navigation.NavigationView
android:id="@+id/nav_view"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_gravity="start"
android:fitsSystemWindows="true"
app:menu="@menu/drawer_view"
app:headerLayout="@layout/nav_header" />
</androidx.drawerlayout.widget.DrawerLayout>
Run Code Online (Sandbox Code Playgroud)
这个布局 …
android android-fragments navigation-drawer android-architecture-components android-architecture-navigation
我正在尝试使用视图绑定替换所有 findViewById。但是,我无法使用View Binding更改 NavController 代码行。
val navController = findNavController(this, R.id.mainHostFragment)
Run Code Online (Sandbox Code Playgroud)
到
var binding : ActivityMainBinding
val navController = findNavController(this, binding.mainHostFragment)
Run Code Online (Sandbox Code Playgroud)
我怎样才能做到这一点?
使用导航 UI 创建底部应用程序栏导航BottomNavigationView
,FragmentContainerView
类似于示例应用程序NavigationAdvancedSample。
请注意,NavigationAndvancedSample应用程序似乎没有使用文档中描述的相同实现,因为它有一个使用自定义扩展方法的解决方法实现setupWithNavController
。
使用.在MainActivity.ktNavHostFragment
中创建 时为 Null 。BottomNavigationView
FragmentContainerView
可重现的错误和完整的代码示例可在BottomNavigationViewSample存储库中找到。
\n\n\n2020-05-15 12:39:19.117 18747-18747/com.example.bottomnavigationviewsample E/AndroidRuntime: 致命异常: main\n 进程: com.example.bottomnavigationviewsample, PID: 18747\n java.lang.RuntimeException: 无法启动活动 ComponentInfo{com.example.bottomnavigationviewsample/com.example.bottomnavigationviewsample.MainActivity}:kotlin.TypeCastException:null 无法转换为非 null 类型 androidx.navigation.fragment.NavHostFragment\n 在 android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3270)\n 在 android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3409)\n 在 android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java :83)\n 在 android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135)\n 在 android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95)\n 在 android.app.ActivityThread$ H.handleMessage(ActivityThread.java:2016)\n 在 android.os.Handler.dispatchMessage(Handler.java:107)\n 在 android.os.Looper.loop(Looper.java:214)\n 在 android.app .ActivityThread.main(ActivityThread.java:7356)\n 在 …
android android-fragments android-navigation android-architecture-navigation android-bottomappbar
我正在创建一个带有 BottomNavigationView 的应用程序。
我正在使用 JetpackNavigation 和 kotlin。
我已将 XML 设置为
<fragment
android:id="@+id/fragNavHost"
android:name="androidx.navigation.fragment.NavHostFragment"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:defaultNavHost="true"
app:layout_constraintBottom_toTopOf="@+id/bottomNavView"
app:navGraph="@navigation/bottom_nav_graph"
tools:layout_editor_absoluteX="0dp" />
<com.google.android.material.bottomnavigation.BottomNavigationView
android:id="@+id/bottomNavView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:menu="@menu/bottom_nav_menu">
Run Code Online (Sandbox Code Playgroud)
但我Replace the <fragment> tag with FragmentContainerView.
从 Android Studio 建议中收到一条建议消息
该应用程序在使用 FragmentContainerView 时中断,但在使用 Fragment 时完美运行
我收到的错误是
Unable to start activity ComponentInfo{com.example.reportbusterclone/com.example.reportbusterclone.view.MainActivity}: java.lang.IllegalStateException: Activity com.example.reportbusterclone.view.MainActivity@f462d5a does not have a NavController set on 2131296446
Run Code Online (Sandbox Code Playgroud)
即使只有标签发生变化而没有其他变化。
我已经看过这个问题:FragmentContainerView using findNavController关于这个问题。但我仍然无法解决问题。它永远不会打开其他片段。我想也许是因为视图绑定,但我尝试在不使用视图绑定的情况下再次执行此操作。还没开啊
MainActivity.kt
class MainActivity : AppCompatActivity() {
private lateinit var binding: ActivityMainBinding
private lateinit var navController: NavController
private lateinit var navHostFragment: NavHostFragment
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding = ActivityMainBinding.inflate(layoutInflater)
val view = binding.root
setContentView(view)
val navHostFragment =
supportFragmentManager.findFragmentById(R.id.main_nav_host_fragment) as NavHostFragment
navController = navHostFragment.navController
binding.bottomNavigationView.setupWithNavController(navController)
}
override fun onOptionsItemSelected(item: MenuItem): Boolean {
when (item.itemId) {
R.id.home -> {
navHostFragment.navController.popBackStack()
return true
}
}
return super.onOptionsItemSelected(item)
}
}
Run Code Online (Sandbox Code Playgroud)
活动主文件
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout
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" …
Run Code Online (Sandbox Code Playgroud) android kotlin android-studio android-architecture-navigation