有朋友反映资源下载下来有问题,我看了下,确实是,已更新下面文章中的代码和资源,现在可以好好的跑起来了,另外还改动了个小地方的逻辑,因为我在使用中出了点小错,需要的可以试下。另外,在使用中,注意下子activity中的上下文context,有可能有错,具体的东西在源码里有。

源码下载:https://github.com/qianjin/TestTabHost (csdn我传不上来,传到git去了)

可滑动的Tabhost,借助了surporrtV13,V4也差不多,一样的。

二者结合,当tabhost的tabbar点击的时候,viewPager滑动,滑动viewPager的时候,tabbar切换。tabbar的样式进行了重新布局,当然,你也可以自己定义自己的,详情看代码吧(下面有源码下载的地址)。

首先你要先在项目下建个libs把surporrtV13的jar包放进去。

效果图:

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

转载于:https://www.cnblogs.com/sunylat/p/6119093.html

ViewPager和Tabhost结合,可滑动的tabhost相关推荐

  1. SwipeRefreshLayout+CoordinatorLayout+AppBarLayout+TabLayout+ViewPager+RecyclerView 刷新,不能滑动等问题

    使用SwipeRefreshLayout+CoordinatorLayout+AppBarLayout+TabLayout+ViewPager+Fragment+RecyclerView 实现首页悬浮 ...

  2. ViewPager套嵌RecyclerView出现滑动条目时滑不动原因

    ViewPager套嵌RecyclerView出现滑动条目时滑不动原因 在滑动条目时,在有TextView地方滑不动,在条目其他空白地方却可以滑动,去除 android:singleLine=&quo ...

  3. android tabhost 动画,Android中使用TabHost 与 Fragment 制作页面切换效果

    三个标签页置于顶端 效果图: 在文件BoardTabHost.java中定义页面切换的效果:切换页面时,当前页面滑出,目标页面滑入.这是2个不同的动画设定动画时要区分对待 import android ...

  4. TabHost+ViewPager+Fragment实现页面的滑动,android开发工具deve

    <android.support.v4.view.ViewPager android:id="@+id/viewpager" android:layout_width=&qu ...

  5. ViewPager,TabLayout,Fragment实现tabs滑动

    工作半年了,准备在新的一年开始写点博客,记录自己的成长,如果能给别人一些参考就更好了. Demo实现: 前段时间公司的项目遇到了使用 ViewPager,TabLayout 和 Fragment实现一 ...

  6. viewpager 无网络的时候滑动异常

    不知道大家有没有遇到过这种情况,就是框架是viewpager+fragment的架构.然后呢,fragment里面是webview.一般情况下,当没有网的时候,webviwe会说什么找不到网页,然后很 ...

  7. TabHost的使用(二):实现TabHost.TabContentFactory接口

    实现TabHost.TabContentFactory接口,要实现 public View createTabContent(String text) package com.example.andr ...

  8. Android之解决NestedScrollView嵌套ViewPager导致出现左右页面滑动冲突

    1 问题 NestedScrollView里面嵌勒ViewPager+TabLayout,导致在这个页面监听不到左右页面滑动,需要解决这个监听滑动问题. 2 解决办法 val nestedScroll ...

  9. android tabhost的使用方法,android TabHost(选项卡)的使用方法

    首先,定义TabHost的布局文件: android:id="@android:id/tabhost" android:layout_width="fill_parent ...

  10. android滑动fragment,android中ViewPager结合Fragment进行无限滑动

    实现ViewPager结合Fragment实现无限循环切换,这里也是在适配器里面进行的,当然使用滑动监听也能够实现 import android.support.v4.app.Fragment; im ...

最新文章

  1. mysql frm恢复数据_MYSQL使用.frm恢复数据表结构的实现方法
  2. 写MySQL存储过程实现动态执行SQL
  3. mysql写下拉树_PHP+mysql实现从数据库获取下拉树功能的方法
  4. ctf-HITCON-2016-houseoforange学习
  5. SQL报错:Column count doesn‘t match value count at row 1
  6. spring整合redis菜鸟版
  7. RS485接线 | Modbus智能LED三色声光报警器 机房警示灯带蜂鸣器
  8. Go语言 常用日志记录方法
  9. 五菱宏光MINI EV,重走“小米”路
  10. 奈奎斯特定理与香农定理
  11. 微信退款回调AES算法(AES-256-ECB)
  12. flume1.9学习笔记
  13. Excel.Application组件使用方法 matlab可以参考使用
  14. 地址总线、数据总线和控制总线简述
  15. 天馈线频谱综合信号测试仪是什么 什么品牌的好用
  16. R手册(Common)--R语言入门
  17. 关于百度云大文件下载慢问题
  18. 【Python深度学习】基于Tensorflow2.0构建CNN模型尝试分类音乐类型(一)
  19. 美术初学者画速写人物遇到的问题有哪些
  20. Flutter plugin not installed this adds Flutter specific functionality

热门文章

  1. 回顾频谱图卷积的经典工作:从ChebNet到GCN
  2. CVPR 2018 挑战赛
  3. 【RBM】代码学习--DeepLearningToolBox
  4. Python基于迁移学习的交通信号识别实战【图像多分类任务】【实测准确度超过96.7%】
  5. python模块学习---glob 文件路径查找
  6. mysql开启事务并锁表_MySQL:如何锁定表并启动事务?
  7. ServerHttpRequest 和 HttpServletRequest 获取 IP 地址 学习笔记
  8. php去除中文以外的特殊字符,php从文本中去除空格、特殊字符的4种情况
  9. linux 显示目录的大小不一样,linux目录大小显示不实时问题
  10. 二十四、JAVA集合框架(四)