Ник*_*пов 1 java navigation android android-fragments android-studio
在应用程序的一次启动期间,日志发出了这样的一堆错误:
\nE/AndroidRuntime: FATAL EXCEPTION: main\nProcess: com.nikitafront.schooldiary, PID: 29751\njava.lang.RuntimeException: Unable to start activity ComponentInfo{com.nikitafront.schooldiary/com.nikitafront.schooldiary.MainActivity}: java.lang.IllegalStateException: Activity com.nikitafront.schooldiary.MainActivity@4801345 does not have a NavController set on 2131296534\n at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3754)\n at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3912)\n at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:85)\n at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135)\n at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95)\n at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2319)\n at android.os.Handler.dispatchMessage(Handler.java:106)\n at android.os.Looper.loop(Looper.java:239)\n at android.app.ActivityThread.main(ActivityThread.java:8205)\n at java.lang.reflect.Method.invoke(Native Method)\n at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:626)\n at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1016)\n Caused by: java.lang.IllegalStateException: Activity com.nikitafront.schooldiary.MainActivity@4801345 does not have a NavController set on 2131296534\n at androidx.navigation.Navigation.findNavController(Navigation.java:61)\n at com.nikitafront.schooldiary.MainActivity.onCreate(MainActivity.java:53)\n at android.app.Activity.performCreate(Activity.java:8119)\n at android.app.Activity.performCreate(Activity.java:8103)\n at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1359)\n at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3727)\n at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3912)\xc2\xa0\n at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:85)\xc2\xa0\n at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135)\xc2\xa0\n at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95)\xc2\xa0\n at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2319)\xc2\xa0\n at android.os.Handler.dispatchMessage(Handler.java:106)\xc2\xa0\n at android.os.Looper.loop(Looper.java:239)\xc2\xa0\n at android.app.ActivityThread.main(ActivityThread.java:8205)\xc2\xa0\n at java.lang.reflect.Method.invoke(Native Method)\xc2\xa0\n at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:626)\xc2\xa0\n at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1016)\xc2\xa0\n
Run Code Online (Sandbox Code Playgroud)\n在此之前,我只是尝试应用程序主题,但在我将所有内容恢复到原始状态后,一切都没有改变
\nPS我尝试通过清除缓存并重新启动IDE来解决问题,但这种方法也不起作用。
\nMainActivity.java代码
\npackage com.nikitafront.schooldiary;\n\nimport android.content.res.Configuration;\nimport android.graphics.Canvas;\nimport android.graphics.ColorFilter;\nimport android.graphics.drawable.Drawable;\nimport android.os.Build;\nimport android.os.Bundle;\nimport android.view.View;\nimport android.view.Window;\nimport android.widget.CheckBox;\nimport android.widget.LinearLayout;\nimport android.widget.RadioButton;\nimport android.widget.Spinner;\n\nimport com.google.android.material.bottomnavigation.BottomNavigationView;\n\nimport androidx.annotation.NonNull;\nimport androidx.annotation.Nullable;\nimport androidx.appcompat.app.AppCompatActivity;\nimport androidx.core.content.ContextCompat;\nimport androidx.fragment.app.Fragment;\nimport androidx.navigation.NavController;\nimport androidx.navigation.Navigation;\nimport androidx.navigation.fragment.NavHostFragment;\nimport androidx.navigation.ui.AppBarConfiguration;\nimport androidx.navigation.ui.NavigationUI;\n\nimport com.nikitafront.schooldiary.databinding.ActivityMainBinding;\n\npublic class MainActivity extends AppCompatActivity {\n\nprivate ActivityMainBinding binding;\nprivate CheckBox checkBoxAuto;\nprivate Spinner dropDownList;\nprivate LinearLayout byHandLesson;\n\n@Override\nprotected void onCreate(Bundle savedInstanceState) {\n super.onCreate(savedInstanceState);\n\n binding = ActivityMainBinding.inflate(getLayoutInflater());\n setContentView(binding.getRoot());\n\n BottomNavigationView navView = findViewById(R.id.nav_view);\n // Passing each menu ID as a set of Ids because each\n // menu should be considered as top level destinations.\n AppBarConfiguration appBarConfiguration = new AppBarConfiguration.Builder(\n R.id.nav_write, R.id.nav_do, R.id.nav_account)\n .build();\n\n\n NavController navController = Navigation.findNavController(this, R.id.nav_host_fragment_activity_main);\n NavigationUI.setupActionBarWithNavController(this, navController, appBarConfiguration);\n NavigationUI.setupWithNavController(binding.navView, navController);\n\n\n checkBoxAuto = (CheckBox) findViewById(R.id.checkBoxAuto);\n dropDownList = (Spinner) findViewById(R.id.dropDownListLesson);\n byHandLesson = (LinearLayout) findViewById(R.id.byHandLesson);\n\n}\n\n@Override\nprotected void onStart() {\n super.onStart();\n checkBoxAuto.setOnClickListener(this::selectFillLesson);\n\n int currentNightMode = getApplicationContext().getResources().getConfiguration().uiMode & Configuration.UI_MODE_NIGHT_MASK;\n\n if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP && currentNightMode == Configuration.UI_MODE_NIGHT_YES) {\n getWindow().setNavigationBarColor(ContextCompat.getColor(this, R.color.my_black));\n }\n}\n\npublic void selectFillLesson(View view) {\n if (checkBoxAuto.isChecked()) {\n byHandLesson.setAlpha((float) 0.7);\n } else {\n byHandLesson.setAlpha((float) 1);\n }\n dropDownList.setEnabled(!(checkBoxAuto.isChecked()));\n}\n\npublic void selectCheckBox(View view) {\n checkBoxAuto.setChecked(!checkBoxAuto.isChecked());\n selectFillLesson(checkBoxAuto);\n}\n\npublic void addHomework(View view) {\n\n}\n}\n
Run Code Online (Sandbox Code Playgroud)\nmain_activity.xml代码
\n<?xml version="1.0" encoding="utf-8"?>\n<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"\nxmlns:app="http://schemas.android.com/apk/res-auto"\nandroid:id="@+id/container"\nandroid:layout_width="match_parent"\nandroid:layout_height="match_parent">\n\n<com.google.android.material.bottomnavigation.BottomNavigationView\n android:id="@+id/nav_view"\n android:layout_width="0dp"\n android:layout_height="wrap_content"\n app:layout_constraintBottom_toBottomOf="parent"\n app:layout_constraintLeft_toLeftOf="parent"\n app:layout_constraintRight_toRightOf="parent"\n app:menu="@menu/bottom_nav_menu" />\n\n<androidx.fragment.app.FragmentContainerView\n android:id="@+id/nav_host_fragment_activity_main"\n android:name="androidx.navigation.fragment.NavHostFragment"\n class="androidx.navigation.fragment.NavHostFragment"\n android:layout_width="match_parent"\n android:layout_height="match_parent"\n app:defaultNavHost="true"\n app:layout_constraintBottom_toTopOf="@id/nav_view"\n app:layout_constraintLeft_toLeftOf="parent"\n app:layout_constraintRight_toRightOf="parent"\n app:layout_constraintTop_toTopOf="parent"\n app:navGraph="@navigation/mobile_navigation" />\n\n</androidx.constraintlayout.widget.ConstraintLayout>\n
Run Code Online (Sandbox Code Playgroud)\nManifest.xml代码
\n<?xml version="1.0" encoding="utf-8"?>\n<manifest xmlns:android="http://schemas.android.com/apk/res/android"\npackage="com.nikitafront.schooldiary">\n\n<application\n android:allowBackup="true"\n android:icon="@drawable/homework_icon"\n android:label="@string/app_name"\n android:roundIcon="@drawable/homework_icon"\n android:supportsRtl="true"\n android:theme="@style/Theme.SchoolDiary">\n <activity\n android:name=".MainActivity"\n android:label="@string/app_name">\n <intent-filter>\n <action android:name="android.intent.action.MAIN" />\n\n <category android:name="android.intent.category.LAUNCHER" />\n </intent-filter>\n </activity>\n</application>\n
Run Code Online (Sandbox Code Playgroud)\n\n
小智 9
正如参考文献中所述:
使用 FragmentContainerView 创建 NavHostFragment 或通过 FragmentTransaction 手动将 NavHostFragment 添加到 Activity 时,尝试通过 Navigation.findNavController(Activity, @IdRes int) 在 Activity 的 onCreate() 中检索 NavController 将失败。您应该直接从 NavHostFragment 检索 NavController。
看起来你应该使用
NavHostFragment navHostFragment =
(NavHostFragment) supportFragmentManager.findFragmentById(R.id.nav_host_fragment);
NavController navController = navHostFragment.getNavController();
Run Code Online (Sandbox Code Playgroud)
代替
NavController navController = Navigation.findNavController(this, R.id.nav_host_fragment_activity_main);
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
3057 次 |
最近记录: |