[英]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;
}
一些帮助将被应用。 谢谢!
问题是FrameLayout
有Views
作为孩子。 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.