找不到片段 SettingsFragment 的 id 0x7f0a000e 的视图

No view found for id 0x7f0a000e for fragment SettingsFragment

我是 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 的视图”

在这里和外面浏览了很多。 None 他们帮助了我。

请告诉我错误的原因以及解决方法。

堆栈摘录如下:

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.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

您的 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#add and https://developer.android.com/guide/fragments/transactions#add-remove

根据您的用例,您还可以在新 activity 中打开设置,而不是替换 MainActivity.

中的片段