郭神代码在此http://blog.csdn.net/guolin_blog/article/details/13171191,
我做个简单总结
效果图如下
上述界面主要分为上下2个部分,上部分是个FrameLayout,用来放主要内容。下部分是个LinearLayout,放4个标签。下面标签点击会导致上面的内容改变。
xml代码如下
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<FrameLayout
android:id="@+id/content"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1" >
</FrameLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="60dp"
android:background="@drawable/tab_bg" >
......
</LinearLayout>
</LinearLayout>
实际上有4个Fragment,每个Fragment的代码都是类似的,这里举一个例子,主要是重写了onCreateView函数,里面加载布局。
public class MessageFragment extends Fragment {
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View messageLayout = inflater.inflate(R.layout.message_layout, container, false);
return messageLayout;
}
}
点击tab页响应的核心代码如下
FragmentManager fragmentManager = getFragmentManager();
FragmentTransaction transaction = fragmentManager.beginTransaction();
// 先隐藏掉所有的Fragment,以防止有多个Fragment显示在界面上的情况
hideFragments(transaction);
switch (index) {
case 0:
...
case 1:
...
case 2:
// 当点击了动态tab时,改变控件的图片和文字颜色
newsImage.setImageResource(R.drawable.news_selected);
newsText.setTextColor(Color.WHITE);
if (newsFragment == null) {
// 如果NewsFragment为空,则创建一个并添加到界面上
newsFragment = new NewsFragment();
transaction.add(R.id.content, newsFragment);
} else {
// 如果NewsFragment不为空,则直接将它显示出来
transaction.show(newsFragment);
}
break;
case 3:
default:
...
}
transaction.commit();
首先getFragmentManager获取到manager,然后开启事务,在事务中隐藏所有的fragment,然后显示某一个,这样就达到切换页面的目的。实际上最后的时候R.id.content上有4个Fragment,只是3个隐藏,一个显示