1. public class ViewPagerActivity extends Activity {
  2. List<View> listViews;
  3. Context context = null;
  4. LocalActivityManager manager = null;
  5. TabHost tabHost = null;
  6. private ViewPager pager = null;
  7. @Override
  8. protected void onCreate(Bundle savedInstanceState) {
  9. super.onCreate(savedInstanceState);
  10. setContentView(R.layout.viewpager);
  11. context = ViewPagerActivity.this;
  12. pager  = (ViewPager) findViewById(R.id.viewpager);
  13. //定放一个放view的list,用于存放viewPager用到的view
  14. listViews = new ArrayList<View>();
  15. manager = new LocalActivityManager(this, true);
  16. manager.dispatchCreate(savedInstanceState);
  17. Intent i1 = new Intent(context, T1Activity.class);
  18. listViews.add(getView("A", i1));
  19. Intent i2 = new Intent(context, T2Activity.class);
  20. listViews.add(getView("B", i2));
  21. Intent i3 = new Intent(context, T3Activity.class);
  22. listViews.add(getView("C", i3));
  23. tabHost = (TabHost) findViewById(R.id.tabhost);
  24. tabHost.setup();
  25. tabHost.setup(manager);
  26. //这儿主要是自定义一下tabhost中的tab的样式
  27. RelativeLayout tabIndicator1 = (RelativeLayout) LayoutInflater.from(this).inflate(R.layout.tabwidget, null);
  28. TextView tvTab1 = (TextView)tabIndicator1.findViewById(R.id.tv_title);
  29. tvTab1.setText("第一页");
  30. RelativeLayout tabIndicator2 = (RelativeLayout) LayoutInflater.from(this).inflate(R.layout.tabwidget,null);
  31. TextView tvTab2 = (TextView)tabIndicator2.findViewById(R.id.tv_title);
  32. tvTab2.setText("第二页");
  33. RelativeLayout tabIndicator3 = (RelativeLayout) LayoutInflater.from(this).inflate(R.layout.tabwidget,null);
  34. TextView tvTab3 = (TextView)tabIndicator3.findViewById(R.id.tv_title);
  35. tvTab3.setText("第三页");
  36. Intent intent = new Intent(context,EmptyActivity.class);
  37. //注意这儿Intent中的activity不能是自身,所以我弄了个空的acitivity
  38. tabHost.addTab(tabHost.newTabSpec("A").setIndicator(tabIndicator1).setContent(intent));
  39. tabHost.addTab(tabHost.newTabSpec("B").setIndicator(tabIndicator2).setContent(intent));
  40. tabHost.addTab(tabHost.newTabSpec("C").setIndicator(tabIndicator3).setContent(intent));
  41. pager .setAdapter(new MyPageAdapter(listViews));
  42. pager .setOnPageChangeListener(new OnPageChangeListener() {
  43. @Override
  44. public void onPageSelected(int position) {
  45. //当viewPager发生改变时,同时改变tabhost上面的currentTab
  46. tabHost.setCurrentTab(position);
  47. }
  48. @Override
  49. public void onPageScrolled(int arg0, float arg1, int arg2) {
  50. }
  51. @Override
  52. public void onPageScrollStateChanged(int arg0) {
  53. }
  54. });
  55. //点击tabhost中的tab时,要切换下面的viewPager
  56. tabHost.setOnTabChangedListener(new OnTabChangeListener() {
  57. @Override
  58. public void onTabChanged(String tabId) {
  59. if ("A".equals(tabId)) {
  60. pager.setCurrentItem(0);
  61. }
  62. if ("B".equals(tabId)) {
  63. pager.setCurrentItem(1);
  64. }
  65. if ("C".equals(tabId)) {
  66. pager.setCurrentItem(2);
  67. }
  68. }
  69. });
  70. }
  71. private View getView(String id, Intent intent) {
  72. return manager.startActivity(id, intent).getDecorView();
  73. }
  74. private class MyPageAdapter extends PagerAdapter {
  75. private List<View> list;
  76. private MyPageAdapter(List<View> list) {
  77. this.list = list;
  78. }
  79. @Override
  80. public void destroyItem(View view, int position, Object arg2) {
  81. ViewPager pViewPager = ((ViewPager) view);
  82. pViewPager.removeView(list.get(position));
  83. }
  84. @Override
  85. public void finishUpdate(View arg0) {
  86. }
  87. @Override
  88. public int getCount() {
  89. return list.size();
  90. }
  91. @Override
  92. public Object instantiateItem(View view, int position) {
  93. ViewPager pViewPager = ((ViewPager) view);
  94. pViewPager.addView(list.get(position));
  95. return list.get(position);
  96. }
  97. @Override
  98. public boolean isViewFromObject(View arg0, Object arg1) {
  99. return arg0 == arg1;
  100. }
  101. @Override
  102. public void restoreState(Parcelable arg0, ClassLoader arg1) {
  103. }
  104. @Override
  105. public Parcelable saveState() {
  106. return null;
  107. }
  108. @Override
  109. public void startUpdate(View arg0) {
  110. }
  111. }
  112. }

ViewPager和Tabhost结合,可滑动的tabhost的更多相关文章

  1. Android ViewPager再探:增加滑动指示条

    上一篇:<Android ViewPager初探:让页面滑动起来> ViewPager只是左右滑动有些丑,也不知道当前位于第几页面. 可以在上方加入滑动指示条,来确定当前位置. 只需要修改 ...

  2. Android ViewPager初探:让页面滑动起来

    下一篇:<Android ViewPager再探:增加滑动指示条> ViewPager需要用到适配器PagerAAdapter,以下四个函数需要重写: instantiateItem(Vi ...

  3. viewpager在最后一页滑动之后,跳转到主页面

    [TOC] viewpager在最后一页滑动之后,跳转到主页面 思路 主要有是两个监听, 一是addOnPageChangeListener();二是setOnTouchListener(): add ...

  4. 【解决ViewPager在大屏上滑动不流畅】 设置ViewPager滑动翻页距离

    在项目中做了一个ViewPager+Fragment滑动翻页的效果,在模拟器和小米手机上测试也比较正常.但是换到4.7以上屏幕测试的时候发现老是滑动失效. 因为系统默认的滑动策略是当用户滑动超过半屏之 ...

  5. 又折腾到这么晚 , 图片Viewpager PagerIndicator,listview 和侧边栏滑动的事件处理

    代码 思路 根据坐标判断 事件是否拦截 调用 getParent().requestDisallowInterceptTouchEvent(true);方法告诉上层ViewGroup 是否拦截 返回t ...

  6. viewpager双层嵌套,子viewpager无限循环无法手动滑动

    项目中首页是用viewpager+fragment集成的,第一个fragment有广告轮播图使用viewpager实现的,开始就遇到是广告图无法手动滑动,事件被外层的viewpager拦截响应切换到下 ...

  7. ViewPager+Fragment实现支持左右滑动的Tab

    主要思想:顶部标题栏top.xml,中间ViewPager(4个Fragment),底部导航 top.xml和bottom.xml在我之前的两个随笔里有,此处不再赘述. activity_main.x ...

  8. ViewPager 简单实现左右无限滑动.

    只需在在适配器中将getCount 给一个较大的值, 然后将currentItem 设为值的一半 就可以伪实现 无限循环. private static final int PAGE_COUNT = ...

  9. Android:简单实现ViewPager+TabHost+TabWidget实现导航栏导航和滑动切换

    viewPager是v4包里的一个组件,可以实现滑动显示多个界面. android也为viewPager提供了一个adapter,此adapter最少要重写4个方法: public int getCo ...

随机推荐

  1. 简单谈谈如何利用h5实现音频的播放

    作者:白狼 出处:http://www.manks.top/article/h5_audio本文版权归作者,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律 ...

  2. SharePoint中新创建的Web Application在浏览器中报404错误

    问题描述:在安装完成SharePoint 2010后,进入Central Administration,创建一个新的Web Application,可以正常创建,但访问时却返回404. 平台环境:Wi ...

  3. 转-HttpClient4.3 连接管理

    转 http://www.yeetrack.com/?p=782 2.1.持久连接 两个主机建立连接的过程是很复杂的一个过程,涉及到多个数据包的交换,并且也很耗时间.Http连接需要的三次握手开销很大 ...

  4. MVC_Controller

    准备工作 安装VS2010或更高版本 安装数据库2008或更高版本 视个人系统不同配置IIS本地服务 数据库和VS下载地址 http://msdn.itellyou.cn/ 本节目标 通过本节案例对M ...

  5. 烂泥:nginx负载均衡

    本文由秀依林枫提供友情赞助,首发于烂泥行天下. 今天我们来学习下有关nginx的负载均衡配置.nginx的负载均衡是通过nginx的upstream模块和proxy_pass反向代理来实现的. 说明: ...

  6. UTF-8-BOM

    https://www.zhihu.com/question/20167122 知乎 「带 BOM 的 UTF-8」和「无 BOM 的 UTF-8」有什么区别?网页代码一般使用哪个? http://b ...

  7. 第十篇 SQL Server代理使用代理帐户

    本篇文章是SQL Server代理系列的第十篇,详细内容请参考原文 在这一系列的上一篇,你查看了msdb库下用于授权访问SQL Server代理的安全角色.这些角色包括SQLAgentUserRole ...

  8. Nginx服务器

    什么是Nginx? Nginx是一种服务器软件,如同apache.tomcat.是一种高性能的HTTP和反向代理服务器以及代理邮件服务器.也就是说Nginx服务器可以发布网站,也可以负载均衡,还可以作 ...

  9. Spring3之MVC

    模式-视图-控制器(MVC)是UI设计中常见的设计模式, 该模式区分应用程序中的模式.视图和控制器三个角色,消除了业务逻辑与UI的耦合.模式负责封装视图展示的应用数据.视图应该只显示数据,不包含任何业 ...

  10. C语言study一

    之前看了CPP,敲过些代码,但总觉得学得不够系统,书后面的习题比较无聊,不想去写.C主要在学数据结构和理解底层上面很有帮助. 于是又来mooc学习C语言,看了下视频虽然很繁琐啰嗦,但是有些东西我确实以 ...