我在单击幻灯片菜单中的选项后尝试从MainActivity中删除片段。但我找不到如何实现它。
我在网上找了FragmentTransaction
课,但我觉得我的实施错了。
MainActivity Java;
@Override
public boolean onNavigationItemSelected(MenuItem item) {
// Handle navigation view item clicks here.
int id = item.getItemId();
if (id == R.id.Technology) {
FragmentTransaction.remove(R.layout.frag);
} else if (id == R.id.Opinion) {
} else if (id == R.id.travel) {
} else if (id == R.id.politics) {
}else if(id == R.id.Home){
}
DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
drawer.closeDrawer(GravityCompat.START);
return true;
main_content的XML文件;
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout 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: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"
android:background="#692f2f"
app:layout_behavior="@string/appbar_scrolling_view_behavior"
tools:showIn="@layout/app_bar_main">
<fragment
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/fragment"
android:layout_alignParentTop="true"
android:layout_centerHorizontal="true"
android:layout_marginTop="53dp"
tools:layout="@layout/frag" />
</RelativeLayout>
答案 0 :(得分:2)
抱歉我的英文。
如果您希望能够在运行时管理片段,则不应在XML文件中对其进行硬编码,而应在XML中放置一个空容器,如下所示:
<FrameLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/fragment"
/>
您通常不希望对layout_width和layout_height使用wrap_content
来简化展示位置。边距也可以直接取决于片段的内容而不是片段本身,否则,您可以将其放回main_activity XML布局文件中。
并在你的片段类中充气:
@Override
public View onCreateView(LayoutInflater inflater,
ViewGroup container, Bundle savedInstanceState) {
return inflater.inflate(R.layout.your_fragment_layout_here, container, null);
}
然后在你的代码中,你应该有一个FragmentManager来使用FragmentTransaction,例如:
private FragmentManager fm;
private FragmentTransaction ft
onCreate
函数中的:
fm = getFragmentManager();
然后:
@Override
public boolean onNavigationItemSelected(MenuItem item) {
// Handle navigation view item clicks here.
int id = item.getItemId();
ft = fm.beginTransaction();
if (id == R.id.Technology) {
ft.remove (fragment_instance_to_remove_here);
ft.commit();
} else if (id == R.id.Opinion) {
} else if (id == R.id.travel) {
} else if (id == R.id.politics) {
}else if(id == R.id.Home){
}
DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
drawer.closeDrawer(GravityCompat.START);
return true;
}
更多解释FragmentManager。
希望有所帮助。