【问题标题】:Is it possible to remove a fragment without replacing it by another fragment?是否可以删除一个片段而不用另一个片段替换它?
【发布时间】:2014-12-09 17:56:40
【问题描述】:

我在Drawer的内容框架中使用了一个带有NavigationDrawer的ActionBarActivity和一个ListView。

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

<FrameLayout
    android:id="@+id/content_frame"
    android:layout_width="fill_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

    <LinearLayout
        android:id="@+id/lyt_list"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:layout_weight="1"
        android:orientation="horizontal" >

        <ListView
            android:id="@+id/list_notes"
            android:layout_width="0dip"
            android:layout_height="fill_parent"
            android:layout_weight="1"       >
        </ListView>
    </LinearLayout>
</FrameLayout>

<FrameLayout
    android:id="@+id/drawer_frame"
    android:layout_width="240dp"
    android:layout_height="fill_parent"
    android:layout_gravity="start"
    android:layout_weight="1" >

    <ListView
        android:id="@+id/left_drawer"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:background="@color/darkGray"
        android:choiceMode="singleChoice"/>
     </FrameLayout>

我从以下抽屉项目之一打开 PreferenceFragment:

  FragmentTransaction transaction = getFragmentManager().beginTransaction();
                PrefsFragment prefs = new PrefsFragment();
                transaction.add(R.id.content_frame, prefs);
                transaction.addToBackStack(null);
                transaction.commit();

这是我的 PrefsFragment:

public class PrefsFragment extends Fragment {

@Override
public void onActivityCreated(Bundle savedInstanceState) {
    super.onActivityCreated(savedInstanceState);
    getActivity().getFragmentManager().beginTransaction()
            .replace(R.id.content_frame, new PrefsFr())
            .commit();
}


public class PrefsFr extends PreferenceFragment {


    @Override
    public void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);          
        addPreferencesFromResource(R.xml.preferences);
      ...  }
}

}

但我无法删除此片段。 当我切换到另一个抽屉项目时; PreferenceFragment 保留在 content_frame 中的 ListView 顶部,具有 tranceparent 背景。

是否可以在 ActionBarActivity 中删除一个片段而不用另一个片段替换它? 如果不是这样,如何将 PreferenceFragment 用于 api > 11 ?真的只有互相替换碎片吗?

【问题讨论】:

    标签: android android-fragments navigation-drawer preferencefragment


    【解决方案1】:

    是否可以在 ActionBarActivity 中删除一个片段而不用另一个片段替换它?

    是的,您可以使用FragmentTransaction#remove(Fragment)

    然而,潜在的问题是您使用transaction.add(R.id.content_frame, prefs); 显示PreferenceFragment。如果您只希望 PreferenceFragment 显示而不显示其后面的 ListView,则应使用 replace() 代替。

    【讨论】:

    • 对不起,我测试了 replace() 和 remove() 没有成功。不知道怎么回事!
    • 我将“prefs”保存为静态字段,然后以这种方式将其删除:transaction.remove(prefs);事务.commit();对吗?
    • 是的,这是从 FragmentManager 中删除该 Fragment 的一种方法。
    • 谢谢@Tanis.7x,我发现了我的问题here 我必须在 PrefsFragment 的 onActivityCreated 方法中调用替换标签并在主要活动中使用 getFragmentManager().findFragmentByTag(TAG) 来删除它。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-18
    • 2011-08-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多