TabHost已经是废弃方法,现在想要实现Tab效果,应该首选Fragment.
但是今天在使用Fragment跳转时发现一些问题.
我最初的布局文件
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
android:id="@+id/top_fragment"
android:name="com.example.fragment.FragmentTop"
android:layout_width="fill_parent"
android:layout_height="45dp" />
android:id="@+id/middle_fragment"
android:name="com.example.fragment.FragmentProduct"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_above="@+id/bottom_fragment"
android:layout_below="@+id/top_fragment" />
android:id="@+id/bottom_fragment"
android:name="com.example.fragment.FragmentBottom"
android:layout_width="fill_parent"
android:layout_height="45dp"
android:layout_alignParentBottom="true" />
布局分头,中,尾三部分,其中头尾固定不变,中部随用户操作而改变.
当我从第一个Fragment 跳转到第二个时一切正常,而第二个跳转到第三个后,在第三个Fragment上空白处点击,会触发到第一个Fragment的OnItemClick事件(第一个Fragment是一个ListFragment).
在网上查阅资料后,得出结论,如果你是用xml定义的方式来创建fragment,那么在程序中是无法将其替换掉的.所以应该将布局文件修改为
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
android:id="@+id/top_fragment"
android:name="com.example.fragment.FragmentTop"
android:layout_width="fill_parent"
android:layout_height="45dp" />
android:id="@+id/content_fragment"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_above="@+id/bottom_fragment"
android:layout_below="@+id/top_fragment" >
android:id="@+id/bottom_fragment"
android:name="com.example.fragment.FragmentBottom"
android:layout_width="fill_parent"
android:layout_height="45dp"
android:layout_alignParentBottom="true" />
即将中间的fragment标签用一个FrameLayout来代替,然后在程序中就可以使用FragmentTransaction的replace方法,将自己的Fragment来替换掉FrameLayout的内容了.
另外,如果是在屏幕翻转时出现FrameLayout中进行fragment替换时出现fragment重叠的现象,可以尝试把当前FragmentActivity的onSaveInstanceState重写,注释掉其中的super.onSaveInstanceState(outState)即可.