文章地址: Android项目Tab类型主界面大总结 Fragment+TabPageIndicator+ViewPager

1、使用ViewPager + PagerAdapter

  每个页面的内容都在同一个Activity中,维护起来会比较麻烦

  实现:

  在页面上加入ViewPager控件。  

  <android.support.v4.view.ViewPager
android:id="@+id/viewPager"
android:layout_width="fill_parent"
android:layout_height="fill_parent"> </android.support.v4.view.ViewPager>

  创建每个Tab页的信息,并在Activity中获取这些Tab页,加入List<View>中。

     form1 = (LinearLayout) inflater.inflate(R.layout.layout_pager1, null);
form2 = (LinearLayout) inflater.inflate(R.layout.layout_page2, null);
form3 = (LinearLayout) inflater.inflate(R.layout.layout_pager3, null); listViews.add(form1);
listViews.add(form2);
listViews.add(form3);

  创建PagerAdapter的对象(通过自定义类MyPagerAdapter继承自PagerAdapter),并绑定到ViewPager上。

  自定义的MyPagerAdapter一定要重写destroyItem、instantiateItem、getCount、isViewFromObject。

private class MyPagerAdapter extends PagerAdapter {

        @Override
public void destroyItem(ViewGroup container, int position, Object object) {
container.removeView(listViews.get(position));
} @Override
public Object instantiateItem(ViewGroup container, int position) {
View view = listViews.get(position);
container.addView(view);
return view;
} @Override
public int getCount() {
// TODO Auto-generated method stub
return listViews.size();
} @Override
public boolean isViewFromObject(View view, Object obj) {
// TODO Auto-generated method stub
return view == obj;
} }

  这样一个简单的可以左右滑动的界面就完成了。不过有个明显的缺点,界面上没有可以指示当前在第几个页面的信息,用户也无法明确看到一共有多少个页面。可以像我参考的博客上的例子,在主界面上添加一个Layout,定义几个按钮。也可以使用Activity的getActionBar方法获取当前Activity对应的ActionBar,在ActionBar上添加Tab来指示当前页面。使用ActionBar时,需要为Tab添加TabListener事件,重写onTabSelected方法,当用户选择了对应的Tab页签,ViewPager需要跳转到对应的界面。

      tab.setTabListener(new ActionBar.TabListener() {

                @Override
public void onTabUnselected(Tab tab, FragmentTransaction ft) {
// TODO Auto-generated method stub } @Override
public void onTabSelected(Tab tab, FragmentTransaction ft) {
// TODO Auto-generated method stub
String text = tab.getText().toString();
int selectedIndex = 0;
switch(text) {
case PAGE1 :
selectedIndex = 0;
break;
case PAGE2 :
selectedIndex = 1;
break;
case PAGE3 :
selectedIndex = 2;
break;
default:
selectedIndex = 0;
break;
} viewPager.setCurrentItem(selectedIndex); //设置页签上的图片
for (int j = 0; j < bar.getTabCount(); j++) {
Tab tab1 = bar.getTabAt(j);
if (selectedIndex == j) {
tab1.setIcon(onIcons[j]);
} else {
tab1.setIcon(offIcons[j]);
}
}
} @Override
public void onTabReselected(Tab tab, FragmentTransaction ft) {
// TODO Auto-generated method stub }
});

  现在点击页签,就会跳转到对应的页面。但是左右滑动页面的时候,页签并不会跟着变化。再添加页面滑动的事件。

    viewPager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() {

            @Override
public void onPageSelected(int i) {
// for (int j = 0; j < bar.getTabCount(); j++) {
// Tab tab = bar.getTabAt(j);
// if (i == j) {
// tab.setIcon(onIcons[j]);
// } else {
// tab.setIcon(offIcons[j]);
// }
// }
bar.selectTab(bar.getTabAt(i));
} @Override
public void onPageScrolled(int i, float f, int j) {
// TODO Auto-generated method stub } @Override
public void onPageScrollStateChanged(int i) {
// TODO Auto-generated method stub }
});

  OK,页签和页面可以联动了。

2、FragmentManager + Fragment

  每个页面的内容分开,但是只能点击按钮换页

3、ViewPager + FragmentPagerAdapter

  综合前两种方式,比较好

4、TabPageIndicator + ViewPager + FragmentPagerAdapter

  第三方插件,呈现界面与第3中不同,但同样很好。

将自己写代码实现后两种方式。

参考:

Android项目Tab类型主界面大总结 Fragment+TabPageIndicator+ViewPager

Android 使用Fragment,ViewPagerIndicator 制作csdn app主要框架

开源控件ViewPagerIndicator的使用

Android Tab类型主界面 Fragment+TabPageIndicator+ViewPager的更多相关文章

  1. Android项目Tab类型主界面大总结 Fragment+TabPageIndicator+ViewPager

    转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/24740977 Android如今实现Tab类型的界面方式越来越多,今天就把常见的 ...

  2. android Tab 类型切换界面

    实现方案:viewpager + fragment + FragmentPagerAdapter 效果图: 可以左右滑动切换选项卡,或者点击: 如果想使用fragment的时候又想可以左右滑动,就可以 ...

  3. Android应用经典主界面框架之二:仿网易新闻client、CSDN client (Fragment ViewPager)

    另外一种主界面风格则是以网易新闻.凤凰新闻以及新推出的新浪博客(阅读版)为代表.使用ViewPager+Fragment,即ViewPager里适配器里放的不是一般的View.而是Fragment.所 ...

  4. Android应用经典主界面框架之中的一个:仿QQ (使用Fragment, 附源代码)

    备注:代码已传至https://github.com/yanzi1225627/FragmentProject_QQ 欢迎fork,如今来审视这份代码,非常多地方写的不太好,欢迎大家指正.有时间我会继 ...

  5. 安卓开发_慕课网_Fragment实现Tab(App主界面)

    学习内容来自“慕课网” 这里用Fragment来实现APP主界面 思路: 底部横向排列4个LinearLayout,每个LinearLayout包含一个图片按钮和一个文字 1.默认显示第一个功能(微信 ...

  6. 安卓开发_慕课网_ViewPager实现Tab(App主界面)

    学习内容来自“慕课网” 网站上一共有4种方法来实现APP主界面的TAB方法 这里学习第一种 ViewPager实现Tab 布局文件有7个, 主界面acitivity.layout <Linear ...

  7. Android AsynTask更新主界面

    虽然今天礼拜六还在加班,但是在等接口,所以还是有很多时间来自己学点东西的,所以就接着昨天的来.今天继续学的是不通过主线程来更新主线程的界面的问题. 昨天是用的开启线程调用Handler来更新线程,那个 ...

  8. 安卓开发_慕课网_ViewPager与FragmentPagerAdapter实现Tab实现Tab(App主界面)

    学习内容来自“慕课网” ViewPager与FragmentPagerAdapter实现Tab 将这两种实现Tab的方法结合起来.效果就是可以拖动内容区域来改变相应的功能图标亮暗 思路: Fragme ...

  9. [android] 新闻客户端主界面部分

    当我们使用activity加fragment的时候,每个界面都要建立一个fragment,每个fragment里面都要重写onCreate(),onCreateView(),onActivityCre ...

随机推荐

  1. 多线程之CAS

    在JDK 5之前Java语言是靠synchronized关键字保证同步的,这会导致有锁 锁机制存在以下问题: (1)在多线程竞争下,加锁.释放锁会导致比较多的上下文切换和调度延时,引起性能问题. (2 ...

  2. Mysql 调优2个语句

    一.explain 语句 查看语句的执行计划 二.查看具体每一步耗时 .; .执行SQL .show profiles; 获取2执行SQL的query_id .show profile for que ...

  3. JAVA框架 Spring 和Mybatis整合(动态代理)

    一.使用传统方式的dao的书写方式,不建议.目前采用的是动态代理的方式交给mybatis进行处理. 首先回顾下动态代理要求: 1)子配置文件的中,namespace需要是接口的全路径,id是接口的方法 ...

  4. 七,ESP8266-UDP(基于Lua脚本语言)

    https://www.cnblogs.com/yangfengwu/p/7533302.html 那天朋友问我为什么有UDP Sever 和 UDP Client   ,,我说:每个人想的不一样,设 ...

  5. python_基础硬件知识

    通过学习这一篇章的内容,回顾了<数字逻辑><计算机组成原理><操作系统> 这几门课的相关知识 有时候,总是要了解一些基本,才能更容易理解程序 以下是我的一些听课记录 ...

  6. python with原理

    在python2.5+中可以用with来保证关闭打开的文件 with open('hello.txt') as f: do some file operations 为什么要引入with呢? 在之前如 ...

  7. 2017-2018-2 20155231《网络对抗技术》实验八: WEB基础实验

    2017-2018-2 20155231<网络对抗技术>实验八:Web基础 实验要求: Web前端HTML(0.5分) 能正常安装.启停Apache.理解HTML,理解表单,理解GET与P ...

  8. TreeSet排序相关总结

            java的集合这一块在工作中用得还比较多,有些东西老是忘,因此在此记录下来. TreeSet原理 1.特点 TreeSet是用来排序的, 可以指定一个顺序, 对象存入之后会按照指定的顺 ...

  9. CF 24 D. Broken robot

    D. Broken robot 链接. 题意: 一个方格,从(x,y)出发,等价的概率向下,向左,向右,不动.如果在左右边缘上,那么等价的概率不动,向右/左,向下.走到最后一行即结束.求期望结束的步数 ...

  10. Redis学习之路(四)之Redis集群

    [toc] #Redis集群 1.Redis Cluster简介 Redis Cluster为Redis官方提供的一种分布式集群解决方案.它支持在线节点增加和减少. 集群中的节点角色可能是主,也可能是 ...