如何从活动中删除片段?

时间:2016-07-21 18:28:13

标签: android android-fragments fragmenttransaction

我在单击幻灯片菜单中的选项后尝试从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>

1 个答案:

答案 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

希望有所帮助。