繁体   English   中英

如何在导航抽屉中使用片段

[英]How to work with fragments in navigation drawer

我在导航中实现fragments非常困难。 一旦用户单击项目,我想显示将在FrameLayout显示的片段。 但是当我这样做时,它会向我显示父活动的内容,甚至在FrameLayout替换了片段。

这是父活动的xml

   <?xml version="1.0" encoding="utf-8"?>

<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:id="@+id/container"
    tools:context="com.softoven.ultron.HomeActivity">
    <include
        android:id="@+id/toolbar_layout"
        layout="@layout/toolbar" />
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:paddingBottom="10dp"
        android:paddingTop="10dp"
        android:layout_alignParentBottom="true"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true"
        android:background="@drawable/background_shadow"
        android:orientation="horizontal"
        android:id="@+id/linearLayout">
        <CheckedTextView
            android:layout_marginLeft="10dp"
            android:textSize="14sp"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:gravity="center"
            android:clickable="true"
            android:id="@+id/latest"
            android:textColor="@color/text_color"
            android:text="LATEST" />
        <CheckedTextView
            android:textSize="14sp"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:gravity="center"
            android:clickable="true"
            android:id="@+id/world"
            android:textColor="@color/text_color"

            android:text="WORLD" />
        <CheckedTextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:gravity="center"
            android:clickable="true"
            android:id="@+id/national"
            android:textColor="@color/text_color"
            android:text="NATIONAL"
            android:textSize="14sp"
            />
        <CheckedTextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:gravity="center"
            android:clickable="true"
            android:id="@+id/business"
            android:text="BUSINESS"
            android:textColor="@color/text_color"
            android:textSize="14sp"
            />
        <CheckedTextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:gravity="center"
            android:clickable="true"
            android:id="@+id/finance"
            android:text="FINANCE"
            android:textColor="@color/text_color"
            android:textSize="14sp"
            />
    </LinearLayout>
    <FrameLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:id="@+id/content_container"
        android:layout_below="@+id/toolbar_layout"
        android:layout_above="@+id/linearLayout"
        />
   <!--these shouldn't cause any problem now since they aren't chlid of FrameLayout-->
    <ListView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/listView"
        android:layout_below="@+id/toolbar_layout"
        android:layout_above="@+id/linearLayout"
        />

        <ProgressBar
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:id="@+id/progressBar"
            android:layout_centerVertical="true"
            android:layout_centerHorizontal="true"
             />

</RelativeLayout>

<android.support.design.widget.NavigationView
    android:id="@+id/navigation_view"
    android:layout_width="wrap_content"
    android:layout_height="match_parent"
    android:layout_gravity="start"
    android:background="#000000"
    app:menu="@menu/menu"
    app:itemTextColor="#ffffff"
    app:itemIconTint="#ffffff"/>

这是片段的xml

<?xml version="1.0" encoding="utf-8"?>
<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"
    tools:context="com.softoven.ultron.activities.BookmarkActivity">
    <ListView
        android:layout_marginTop="5dp"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/bookmarks">
    </ListView>
</RelativeLayout>

这是我用于片段交易的代码。

@Override
            public boolean onNavigationItemSelected(MenuItem item) {
                int id = item.getItemId();
                item.setChecked(true);
                drawerLayout.closeDrawers();
                switch (id) {
                    case R.id.news:
                        Toast.makeText(HomeActivity.this, "News", Toast.LENGTH_LONG).show();
                        return true;
                    case R.id.bookmarks:
                        FragmentManager fm = getSupportFragmentManager();
                        fm.beginTransaction().replace(R.id.content_container,new BookmarkFragment()).commit();
                        return true;
                }
                return true;
            }

一些帮助将被应用。 谢谢!

问题是FrameLayoutViews作为孩子。 replace 方法将仅替换先前的片段,如果在FrameLayout添加了任何片段,而不是视图。

要解决此问题,您可以从FrameLayout删除子项并将其添加到单独的Fragment 然后在FrameLayout添加该Fragment作为它在 XML 中的唯一子FrameLayout

然后,当您replace Fragment它最终会被更换。

尝试这个

<ListView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:id="@+id/listView"
    />

    <ProgressBar
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/progressBar"
        android:layout_centerVertical="true"
        android:layout_centerHorizontal="true"
        android:layout_gravity="center" />
</FrameLayout>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM