“没有为ID找到视图” - Android片段

时间:2014-12-29 18:06:15

标签: java android xml android-fragments android-identifiers

所以我正在为朋友制作一个应用程序,它一直在崩溃,无法在我的设备上运行(OnePlus One)。

我一直在收到错误,说“找不到id的视图”: Logcat view for Error

我有两节课;一个NavigationDrawer类(我本质上是我的MainActivity):

  

爪哇   --- http://pastebin.com/4BiYvxiS | XML   --- http://pastebin.com/Fnat83uf

还有一个名为StartingFragment的类(我想在抽屉关闭/不活动时成为主视图。)

  

爪哇   --- http://pastebin.com/HNeHzx1h | XML   --- http://pastebin.com/2viTEWR8

以下是出现错误的代码(来自NavDrawer.java):

        /** Swaps fragments in the main content view */
        /** Starts an Activity when item is clicked */
        private void selectItem(int position) {
                // Create a new fragment and specify the tea type
                // to show based on position
                Fragment fragment = new StartingFragment();
                Bundle args = new Bundle();
                args.putInt(StartingFragment.TEA_TYPE_POS, position);
                fragment.setArguments(args);

                // Insert the fragment by replacing any existing fragment
                FragmentManager fragManager = getFragmentManager();
                fragManager.beginTransaction().replace(R.id.starting_fragment, fragment)
                                .commit();

                // Highlight the selected item, update the title, and close the drawer
                mDrawerList.setItemChecked(position, true);
                setTitle(navDrawerTitles[position]);
                navDrawerLayout.closeDrawer(mDrawerList);

        }

我看了整个StackOverflow,我看到其他人是如何得到这个错误的,但我不完全确定为什么我一直收到这个错误,或者如何修复它。

我在这里看了这个问题: https://stackoverflow.com/a/8158916我发现 R.id.starting_fragment 应该是 R.layout.nav_drawer 孩子

但是,我不知道在我的代码中要调整什么。我应该删除我拥有的按钮,然后在 nav_drawer.xml 中包含片段代码吗?比如这个:

<fragment android:name="com.fv4.app.StartingFragment"
              android:id="@+id/starting_fragment"
              android:layout_width="0dp"
              android:layout_height="match_parent" />

或者真的......我应该在我的代码中用 R.id.starting_fragment 代替什么?

1 个答案:

答案 0 :(得分:0)

在为活动提供的xml中,没有任何内容与id'begin_fragment'无关,因此无需替换,在活动的xml中需要有一个id为“starting_fragment”的view / layout / fragmentContainer。你也有点困惑,.replace()方法中的Id表示你要替换的东西而不是片段的布局

简单修复

在xml中为Activity创建一个frameLayout,给它id'fragment_replace'

将.replace(R.id.starting_fragment,fragment)更改为.replace(R.id.fragment_replace,fragment)