找不到片段的 ID 0x7f090058 的视图

No view found for id 0x7f090058 for fragment

我正在开发一个使用 Google Maps API(有两个单独的地图)的应用程序,我想使用导航抽屉在两个地图(片段)之间切换。

我在 android studio 中使用预编译的导航抽屉 Activity 创建了主 activity,下面是代码片段:

activity_main_activity2.xml

<android.support.v4.widget.DrawerLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/drawer_layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="it.radonmap.radonmap.MainActivity2">

<FrameLayout android:id="@+id/container" android:layout_width="match_parent"
    android:layout_height="match_parent" />

<fragment
    android:id="@+id/map"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    class="com.google.android.gms.maps.SupportMapFragment" />

<fragment android:id="@+id/navigation_drawer"
    android:layout_width="@dimen/navigation_drawer_width"           android:layout_height="match_parent"
    android:layout_gravity="start" android:name="it.radonmap.radonmap.NavigationDrawerFragment"
    tools:layout="@layout/fragment_navigation_drawer" />

</android.support.v4.widget.DrawerLayout>

这是调用 .replace() 方法的代码:

 private void displayView(int position) {
    // update the main content by replacing fragments
    Fragment fragment = null;
    switch (position) {
        case 0:
            //do something
            break;
        case 1:
            fragment = new FragPunti();
            break;
        default:
            break;
    }

    if (fragment != null) {
        FragmentManager fragmentManager;
        fragmentManager = getFragmentManager();
        fragmentManager.beginTransaction().replace(R.id.containerPunti,fragment).commit();

    } else {
        // error in creating fragment
        Log.e("MainActivity", "Error in creating fragment");
    }
}

FragPunti.java

public class FragPunti extends android.support.v4.app.Fragment {

public FragPunti(){}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    View rootView = inflater.inflate(R.layout.frag_punti, null);
    return rootView;
     }
}

frag_punti.xml

<FrameLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_height="match_parent"
android:layout_width="match_parent"
android:id="@+id/containerPunti">
<FrameLayout
    android:id="@+id/framePunti"
    android:layout_width="0px"
    android:layout_height="match_parent"
    >
    <TextView
        android:id="@+id/txtLabel"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerInParent="true"
        android:textSize="16dp"
        android:text="Punti"/>
    </FrameLayout>
 </FrameLayout>

这里是 logcat 跟踪:

04-30 19:17:45.823  20909-20909/it.radonmap.radonmap E/AndroidRuntime﹕ FATAL EXCEPTION: main
Process: it.radonmap.radonmap, PID: 20909
java.lang.IllegalArgumentException: No view found for id 0x7f090058 (it.radonmap.radonmap:id/containerPunti) for fragment FragPunti{36b6aaa5 #2 id=0x7f090058}
        at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:945)
        at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1136)
        at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:739)
        at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1499)
        at android.support.v4.app.FragmentManagerImpl.run(FragmentManager.java:456)
        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:5274)
        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:909)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:704)

我已经在寻找解决方案,但没有结果。 希望有人能帮助我。

您应该为片段传递容器 ID,这是您要在其中显示片段的视图。它在 activity 中,而不是您要显示的片段中。所以将 replace(R.id.containerPunti, fragment) 更改为 replace(R.id.container, fragment).