找不到用于片段GameActivityFragment的id的视图

时间:2016-02-28 09:29:41

标签: android android-fragments

我正在尝试使用片段,但是当我想动态添加或替换片段时,我遇到了麻烦。当我这样做时,我收到此错误消息:

java.lang.IllegalArgumentException: No view found for id 0x7f0c0074 (com.hang:id/fragment_game2_id) for fragment GameActivityFragment{254a4f5 #1 id=0x7f0c0074}

这就是我正在做的事情:

  • 首先,我启动一个名为“GameActivity”的Activity,它包含一个片段视图,使用只有一个按钮的布局(fragment_game):

    <fragment xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        xmlns:tools="http://schemas.android.com/tools"
        android:id="@+id/fragment"
        android:name="com.hang.activities.GameActivityFragment"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        app:layout_behavior="@string/appbar_scrolling_view_behavior"
        tools:layout="@layout/fragment_game" />
    
  • 在“GameActivity”中,我正在调用“setOnClickListener”来更改片段。在“OnClick”中,这是我的代码:

            Bundle b = new Bundle();
            b.putString("level", "01");
            GameActivityFragment fragment = new GameActivityFragment();
            fragment.setArguments(b);
            FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
            ft.replace(R.id.fragment_game2_id, fragment)
                    .addToBackStack(null)
                    .commit();`
    

Fragment_game2_id正在识别RelativeLayout:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/fragment_game2_id"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="com.hang.activities.GameActivityFragment"
tools:showIn="@layout/activity_game">

<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Game Activity fragment!!" />


</RelativeLayout>

在扩展Fragment的我的类“GameActivityFragment”中,我只是重写OnCreateView:

@Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        return inflater.inflate(R.layout.fragment_game, container, false);
    }

当我点击我上面有错误的按钮时。我不明白,因为我有一个带有这个id的视图(fragment_game2_id)。我还尝试将此代码放入GameActivityFragment的“OnCreateView”中,在膨胀视图但结果相同之后,甚至将“GetSupportFragmentManager”替换为“GetFragmentManager”或“GetChildFragmentManager”。我也在这里寻找其他类似问题的答案,但我还没有设法解决问题。

要解释我想做什么:我的MainActivity显示一个片段,其中有几个按钮对应于我游戏的不同级别。通过单击其中一个,我将启动一个名为GameActivity的新Activity,其中包含一个片段。该片段将首先显示所有子级别,当用户点击其中一个时,我想更改片段以启动游戏。完成后,片段将使用显示所有子级别的先前布局替换游戏布局,以便用户可以单击下一个子级别。

编辑:: 我的Fragment_game布局:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="com.hang.activities.GameActivityFragment"
android:background="@color/colorAccent">

<Button
    android:id="@+id/button_test"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Game Activity" />


</RelativeLayout>

就是这样。 谢谢你的帮助。

1 个答案:

答案 0 :(得分:0)

ft.replace(R.id.fragment, fragment).addToBackStack(null).commit();