【问题标题】:No view found for id 0x7f0a000e for fragment SettingsFragment未找到片段 SettingsFragment 的 id 0x7f0a000e 的视图
【发布时间】: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 SettingsFragment{5c8b099} (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

【问题讨论】:

    标签: android android-fragments


    【解决方案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_width="match_parent"
    android:layout_height="match_parent"
    android:name="com.example.ExampleFragment" />
    

    那就是fragmentTransaction.replace(R.id.fragment_container, fragment); 另见https://developer.android.com/guide/fragments/create#addhttps://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) 也没有帮助。按下返回按钮后仍然出现黑屏。
    猜你喜欢
    • 2013-09-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-23
    相关资源
    最近更新 更多