文章地址: 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. Oracle 11g常用管理命令(用户、表空间、权限)

    PS:下面是Oracle 11g最常用的基本管理命令,包括创建用户.表空间,权限分配等.以下命令本人都验证操作过,并加上了本人的小结与说明. 1.启动oracle数据库: 从root切换到oracle ...

  2. 【转】SVN branches trunk 合并 讲解

    转自:http://blog.csdn.net/e3002/article/details/21469437 使用svn几年了,一直对分支和合并敬而远之,一来是因为分支的管理不该我操心,二来即使涉及到 ...

  3. 使用Tensoflow实现梯度下降算法的一次线性拟合

    # Author Qian Chenglong import tensorflow as tf import numpy as np #生成100个随机数据点 x_date=np.random.ran ...

  4. JS日期级联组件代码分析及demo

    最近研究下JS日期级联效果 感觉还不错,然后看了下kissy也正好有这么一个组件,也看了下源码,写的还不错,通过google最早是在2011年 淘宝的虎牙(花名)用原审JS写了一个(貌似据说是从YUI ...

  5. keepalived 做全端口映射

    global_defs {    lvs_id BACKUP }   vrrp_sync_group VGM {     group {        VI_1     } }   vrrp_inst ...

  6. Codeforces round 1103

    Div1 534 我可能还太菜了.jpg 果然我只是Div 2 选手 A (这题是Div1吗... 直接构造:竖着放的在第一行和第二行,然后横着放的时候直接放在第三行就行. #include < ...

  7. 20155209 林虹宇 Exp9 Web安全基础

    Exp9 Web安全基础 XSS 1.Phishing with XSS 跨站脚本攻击,在表单中输入超文本代码 在网页中形成一个自制的登陆表单,然后将结果反馈到自己的主机上. 攻击成功 2.Store ...

  8. 2017-2018 Exp5 MSF基础应用 20155214

    目录 Exp5 MSF基础应用 实验内容 渗透攻击 主要思路 知识点 Exp5 MSF基础应用 本次实验本实践目标是掌握metasploit的基本应用方式,重点常用的三种攻击方式的思路. 主动攻击:m ...

  9. jsp页面中日期的格式化

            在一次开发中,由于数据库中生日采用的是datetime的数据类型,因此数据库中数据格式为:2017-07-11 00:00:00. 但是,编辑页面中回显生日肯定是不可以显示出时分秒的, ...

  10. Jenkins控制台输出乱码

    一.问题详情 jenkins构建mav任务,在控制台显示乱码: 二.原因分析 1. 查看系统编码和tomcat的编码都正常 # grep encoding /usr/local/tomcat/conf ...