替换片段仍然收到事件

时间:2013-10-25 08:19:20

标签: android android-layout android-fragments actionbarsherlock fragment

我正在使用ActionBarSherlock

编写一个Android应用程序

我的布局文件是:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="horizontal" >

    <FrameLayout 
        android:id="@+id/fragment_menu"
        android:layout_width="@dimen/menu_size"
        android:layout_height="wrap_content"/>

    <FrameLayout 
        android:id="@+id/dummy"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"/>
</LinearLayout>

根据菜单片段中选择的类别,我替换虚拟FrameLayout.Eg中的片段:

 Bundle extras = new Bundle();
    extras.putInt(ProgramDetailFrament.EXTRA_PROGRAM_ID, programId);
    final ProgramDetailFrament fragment = ProgramDetailFrament.newInstance(extras);

    getSupportFragmentManager().beginTransaction()
        .replace(R.id.dummy, fragment)
        .addToBackStack(null)
        .commit();
    getSupportFragmentManager().executePendingTransactions();   

但是当我与可见片段交互时,被替换的片段仍然会收到触摸/点击事件。我不知道SherlockFragment是否与这个问题有关?

我通过在可见片段的根布局上设置click事件并在此事件中不执行任何操作来解决此问题。但这似乎是一个丑陋的解决方案。

任何人都知道如何解决它。 提前谢谢。

2 个答案:

答案 0 :(得分:0)

正如您在问题中所说,您尝试替换片段与其他片段,因此您应该使用replace method of FragmentTransaction

以下是大致如何做到这一点:

Bundle extras = new Bundle();
extras.putInt(ProgramDetailFrament.EXTRA_PROGRAM_ID, programId);
ProgramDetailFrament fragment = ProgramDetailFrament.newInstance(extras);

FragmentManager fm = getSupportFragmentManager();
FragmentTransaction ft = fm.beginTransaction();
ft.replace(R.id.id_of_fragment_container, fragment, DETAIL_FRAGMENT_TAG);
ft.commit();

我希望这会有所帮助; - )

答案 1 :(得分:0)

您实际上需要使用替换功能而不是添加。你正在做的是在另一个上面添加一个片段,所以你要创建一堆仍然可见的片段,只有你看不到它们,因为顶部片段覆盖了所有其他片段。

使用替换而不是添加:

getSupportFragmentManager().beginTransaction()
    .replace(R.id.dummy, fragment)
    .addToBackStack(null)
    .commit();
getSupportFragmentManager().executePendingTransactions(); 

这将删除虚拟容器中的所有其他片段并添加您选择的片段。