我正在使用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事件并在此事件中不执行任何操作来解决此问题。但这似乎是一个丑陋的解决方案。
任何人都知道如何解决它。 提前谢谢。
答案 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();
这将删除虚拟容器中的所有其他片段并添加您选择的片段。