未找到片段 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 的视图的主要内容,如果未能解决你的问题,请参考以下文章

由于未找到 ID 错误的视图,列表片段未出现

viewpager 中的片段,未找到视图错误

如何使用菜单按钮将数据从活动传递到android中的片段?

IllegalArgumentException:尝试 setView 时未找到片段 id 的视图

未找到 ID 的 Android 片段

片段中的自定义列表视图。未找到布局