未找到片段 SettingsFragment 的 id 0x7f0a000e 的视图
Posted
技术标签:
【中文标题】未找到片段 SettingsFragment 的 id 0x7f0a000e 的视图【英文标题】:No view found for id 0x7f0a000e for fragment SettingsFragment 【发布时间】:2021-12-21 12:19:39 【问题描述】:我是 android 新手,在 SOians 的帮助下,我能够顺利进行。我正在实现 AppBar 项以从 MainActivity 导航到相应的片段。以下代码是 MainActivity 的一部分。
@Override
public boolean onOptionsItemSelected(MenuItem item)
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up buttonAction, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
switch (id)
case R.id.action_settings:
Fragment fragment = new SettingsFragment();
FragmentManager fragmentManager = this.getSupportFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
fragmentTransaction.replace(R.id.SettingsFragment, fragment);
fragmentTransaction.addToBackStack(null);
fragmentTransaction.commit();
break;
case R.id.action_kyc:
// go to kycfragment
break;
case R.id.action_about:
// go to aboutfragment
break;
default:
break;
return super.onOptionsItemSelected(item);
我收到非法参数异常“没有为片段 SettingsFragment 找到 id 0x7f0a000e 的视图”
在这里和外面都浏览了很多。他们都没有帮助我。
请告诉我是什么导致了错误以及如何修复它。
堆栈摘录如下:
E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.ptimer, PID: 7759
java.lang.IllegalArgumentException: No view found for id 0x7f0a000e (com.example.ptimer:id/SettingsFragment) for fragment SettingsFragment5c8b099 (86b09f6f-49b4-470e-9753-e5acd603164c id=0x7f0a000e)
at androidx.fragment.app.FragmentStateManager.createView(FragmentStateManager.java:513)
at androidx.fragment.app.FragmentStateManager.moveToExpectedState(FragmentStateManager.java:282)
at androidx.fragment.app.FragmentManager.executeOpsTogether(FragmentManager.java:2189)
at androidx.fragment.app.FragmentManager.removeRedundantOperationsAndExecute(FragmentManager.java:2100)
at androidx.fragment.app.FragmentManager.execPendingActions(FragmentManager.java:2002)
at androidx.fragment.app.FragmentManager$5.run(FragmentManager.java:524)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:135)
at android.app.ActivityThread.main(ActivityThread.java:5254)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698)
I/Process: Sending signal. PID: 7759 SIG: 9
【问题讨论】:
【参考方案1】:您的MainActivity
XML 布局看起来如何?
引用您的代码:
fragmentTransaction.replace(R.id.SettingsFragment, fragment);
您的问题很可能是您的布局中没有 id SettingsFragment
的视图。
replace
的第一个参数应该指向布局文件中的片段容器。例如。如果您的布局包括:
<androidx.fragment.app.FragmentContainerView
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/fragment_container"
android:layout_
android:layout_
android:name="com.example.ExampleFragment" />
那就是fragmentTransaction.replace(R.id.fragment_container, fragment);
另见https://developer.android.com/guide/fragments/create#add 和https://developer.android.com/guide/fragments/transactions#add-remove
根据您的用例,您还可以在新活动中打开您的设置,而不是替换 MainActivity
中的片段。
【讨论】:
感谢您的快速回复。但我得到了相同类型的错误。我从你的陈述中了解到fragmentTransaction.replace(R.id.SettingsFragment, fragment);
应该读作 fragmentTransaction.replace("id of the current fragment to be replaced", "destination fragment that is to be displayed");
。启动应用程序时,会显示启动器片段。因此我在这里包括了 Launcher Fragment。但我仍然遇到同样的错误——没有为片段 SettingsFragment 找到 id 0x7f0a0006 (com.example.ptimer:id/LauncherFragment) 的视图。
不,您需要片段容器的 id,而不是当前片段的 id。如果该信息对您来说不够用,您需要将布局文件添加到您的问题中
这很好地解决了我的问题。非常感谢。当然,我会一次又一次地回到 SO 来回答我的问题。不错的论坛。
从启动器片段导航到新片段后,我看到向上箭头丢失。同样,当按下后退按钮时,启动器片段是空白的。是否需要对代码进行更多更改才能正确设置这些?
根据 Android 文档,fragmentTransaction.setReorderingAllowed(true) 和 fragmentTransaction.addToBackStack(null) 也没有帮助。按下返回按钮后仍然出现黑屏。以上是关于未找到片段 SettingsFragment 的 id 0x7f0a000e 的视图的主要内容,如果未能解决你的问题,请参考以下文章