ViewPager和Tabhost结合,可滑动的tabhost
有朋友反映资源下载下来有问题,我看了下,确实是,已更新下面文章中的代码和资源,现在可以好好的跑起来了,另外还改动了个小地方的逻辑,因为我在使用中出了点小错,需要的可以试下。另外,在使用中,注意下子activity中的上下文context,有可能有错,具体的东西在源码里有。
源码下载:https://github.com/qianjin/TestTabHost (csdn我传不上来,传到git去了)
可滑动的Tabhost,借助了surporrtV13,V4也差不多,一样的。
二者结合,当tabhost的tabbar点击的时候,viewPager滑动,滑动viewPager的时候,tabbar切换。tabbar的样式进行了重新布局,当然,你也可以自己定义自己的,详情看代码吧(下面有源码下载的地址)。
首先你要先在项目下建个libs把surporrtV13的jar包放进去。
效果图:
- /**
- * Program : ViewPagerActivity.java
- * Author : qianj
- * Create : 2012-5-31 下午2:02:15
- */
- package cn.learn.tabhosttest;
- import java.util.ArrayList;
- import java.util.List;
- import android.app.Activity;
- import android.app.LocalActivityManager;
- import android.content.Context;
- import android.content.Intent;
- import android.os.Bundle;
- import android.os.Parcelable;
- import android.support.v4.view.PagerAdapter;
- import android.support.v4.view.ViewPager;
- import android.support.v4.view.ViewPager.OnPageChangeListener;
- import android.util.Log;
- import android.view.LayoutInflater;
- import android.view.View;
- import android.widget.RelativeLayout;
- import android.widget.TabHost;
- import android.widget.TabHost.OnTabChangeListener;
- import android.widget.TextView;
- /**
- *
- * @author qianj
- * @version 1.0.0
- * @2012-5-31 下午2:02:15
- */
- public class ViewPagerActivity extends Activity {
- List<View> listViews;
- Context context = null;
- LocalActivityManager manager = null;
- TabHost tabHost = null;
- private ViewPager pager = null;
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.viewpager);
- context = ViewPagerActivity.this;
- pager = (ViewPager) findViewById(R.id.viewpager);
- //定放一个放view的list,用于存放viewPager用到的view
- listViews = new ArrayList<View>();
- manager = new LocalActivityManager(this, true);
- manager.dispatchCreate(savedInstanceState);
- Intent i1 = new Intent(context, T1Activity.class);
- listViews.add(getView("A", i1));
- Intent i2 = new Intent(context, T2Activity.class);
- listViews.add(getView("B", i2));
- Intent i3 = new Intent(context, T3Activity.class);
- listViews.add(getView("C", i3));
- tabHost = (TabHost) findViewById(R.id.tabhost);
- tabHost.setup();
- tabHost.setup(manager);
- //这儿主要是自定义一下tabhost中的tab的样式
- RelativeLayout tabIndicator1 = (RelativeLayout) LayoutInflater.from(this).inflate(R.layout.tabwidget, null);
- TextView tvTab1 = (TextView)tabIndicator1.findViewById(R.id.tv_title);
- tvTab1.setText("第一页");
- RelativeLayout tabIndicator2 = (RelativeLayout) LayoutInflater.from(this).inflate(R.layout.tabwidget,null);
- TextView tvTab2 = (TextView)tabIndicator2.findViewById(R.id.tv_title);
- tvTab2.setText("第二页");
- RelativeLayout tabIndicator3 = (RelativeLayout) LayoutInflater.from(this).inflate(R.layout.tabwidget,null);
- TextView tvTab3 = (TextView)tabIndicator3.findViewById(R.id.tv_title);
- tvTab3.setText("第三页");
- Intent intent = new Intent(context,EmptyActivity.class);
- //注意这儿Intent中的activity不能是自身,所以我弄了个空的acitivity
- tabHost.addTab(tabHost.newTabSpec("A").setIndicator(tabIndicator1).setContent(intent));
- tabHost.addTab(tabHost.newTabSpec("B").setIndicator(tabIndicator2).setContent(intent));
- tabHost.addTab(tabHost.newTabSpec("C").setIndicator(tabIndicator3).setContent(intent));
- pager .setAdapter(new MyPageAdapter(listViews));
- pager .setOnPageChangeListener(new OnPageChangeListener() {
- @Override
- public void onPageSelected(int position) {
- //当viewPager发生改变时,同时改变tabhost上面的currentTab
- tabHost.setCurrentTab(position);
- }
- @Override
- public void onPageScrolled(int arg0, float arg1, int arg2) {
- }
- @Override
- public void onPageScrollStateChanged(int arg0) {
- }
- });
- //点击tabhost中的tab时,要切换下面的viewPager
- tabHost.setOnTabChangedListener(new OnTabChangeListener() {
- @Override
- public void onTabChanged(String tabId) {
- if ("A".equals(tabId)) {
- pager.setCurrentItem(0);
- }
- if ("B".equals(tabId)) {
- pager.setCurrentItem(1);
- }
- if ("C".equals(tabId)) {
- pager.setCurrentItem(2);
- }
- }
- });
- }
- private View getView(String id, Intent intent) {
- return manager.startActivity(id, intent).getDecorView();
- }
- private class MyPageAdapter extends PagerAdapter {
- private List<View> list;
- private MyPageAdapter(List<View> list) {
- this.list = list;
- }
- @Override
- public void destroyItem(View view, int position, Object arg2) {
- ViewPager pViewPager = ((ViewPager) view);
- pViewPager.removeView(list.get(position));
- }
- @Override
- public void finishUpdate(View arg0) {
- }
- @Override
- public int getCount() {
- return list.size();
- }
- @Override
- public Object instantiateItem(View view, int position) {
- ViewPager pViewPager = ((ViewPager) view);
- pViewPager.addView(list.get(position));
- return list.get(position);
- }
- @Override
- public boolean isViewFromObject(View arg0, Object arg1) {
- return arg0 == arg1;
- }
- @Override
- public void restoreState(Parcelable arg0, ClassLoader arg1) {
- }
- @Override
- public Parcelable saveState() {
- return null;
- }
- @Override
- public void startUpdate(View arg0) {
- }
- }
- }
转载于:https://www.cnblogs.com/sunylat/p/6119093.html
ViewPager和Tabhost结合,可滑动的tabhost相关推荐
- SwipeRefreshLayout+CoordinatorLayout+AppBarLayout+TabLayout+ViewPager+RecyclerView 刷新,不能滑动等问题
使用SwipeRefreshLayout+CoordinatorLayout+AppBarLayout+TabLayout+ViewPager+Fragment+RecyclerView 实现首页悬浮 ...
- ViewPager套嵌RecyclerView出现滑动条目时滑不动原因
ViewPager套嵌RecyclerView出现滑动条目时滑不动原因 在滑动条目时,在有TextView地方滑不动,在条目其他空白地方却可以滑动,去除 android:singleLine=&quo ...
- android tabhost 动画,Android中使用TabHost 与 Fragment 制作页面切换效果
三个标签页置于顶端 效果图: 在文件BoardTabHost.java中定义页面切换的效果:切换页面时,当前页面滑出,目标页面滑入.这是2个不同的动画设定动画时要区分对待 import android ...
- TabHost+ViewPager+Fragment实现页面的滑动,android开发工具deve
<android.support.v4.view.ViewPager android:id="@+id/viewpager" android:layout_width=&qu ...
- ViewPager,TabLayout,Fragment实现tabs滑动
工作半年了,准备在新的一年开始写点博客,记录自己的成长,如果能给别人一些参考就更好了. Demo实现: 前段时间公司的项目遇到了使用 ViewPager,TabLayout 和 Fragment实现一 ...
- viewpager 无网络的时候滑动异常
不知道大家有没有遇到过这种情况,就是框架是viewpager+fragment的架构.然后呢,fragment里面是webview.一般情况下,当没有网的时候,webviwe会说什么找不到网页,然后很 ...
- TabHost的使用(二):实现TabHost.TabContentFactory接口
实现TabHost.TabContentFactory接口,要实现 public View createTabContent(String text) package com.example.andr ...
- Android之解决NestedScrollView嵌套ViewPager导致出现左右页面滑动冲突
1 问题 NestedScrollView里面嵌勒ViewPager+TabLayout,导致在这个页面监听不到左右页面滑动,需要解决这个监听滑动问题. 2 解决办法 val nestedScroll ...
- android tabhost的使用方法,android TabHost(选项卡)的使用方法
首先,定义TabHost的布局文件: android:id="@android:id/tabhost" android:layout_width="fill_parent ...
- android滑动fragment,android中ViewPager结合Fragment进行无限滑动
实现ViewPager结合Fragment实现无限循环切换,这里也是在适配器里面进行的,当然使用滑动监听也能够实现 import android.support.v4.app.Fragment; im ...
最新文章
- mysql frm恢复数据_MYSQL使用.frm恢复数据表结构的实现方法
- 写MySQL存储过程实现动态执行SQL
- mysql写下拉树_PHP+mysql实现从数据库获取下拉树功能的方法
- ctf-HITCON-2016-houseoforange学习
- SQL报错:Column count doesn‘t match value count at row 1
- spring整合redis菜鸟版
- RS485接线 | Modbus智能LED三色声光报警器 机房警示灯带蜂鸣器
- Go语言 常用日志记录方法
- 五菱宏光MINI EV,重走“小米”路
- 奈奎斯特定理与香农定理
- 微信退款回调AES算法(AES-256-ECB)
- flume1.9学习笔记
- Excel.Application组件使用方法 matlab可以参考使用
- 地址总线、数据总线和控制总线简述
- 天馈线频谱综合信号测试仪是什么 什么品牌的好用
- R手册(Common)--R语言入门
- 关于百度云大文件下载慢问题
- 【Python深度学习】基于Tensorflow2.0构建CNN模型尝试分类音乐类型(一)
- 美术初学者画速写人物遇到的问题有哪些
- Flutter plugin not installed this adds Flutter specific functionality
热门文章
- 回顾频谱图卷积的经典工作:从ChebNet到GCN
- CVPR 2018 挑战赛
- 【RBM】代码学习--DeepLearningToolBox
- Python基于迁移学习的交通信号识别实战【图像多分类任务】【实测准确度超过96.7%】
- python模块学习---glob 文件路径查找
- mysql开启事务并锁表_MySQL:如何锁定表并启动事务?
- ServerHttpRequest 和 HttpServletRequest 获取 IP 地址 学习笔记
- php去除中文以外的特殊字符,php从文本中去除空格、特殊字符的4种情况
- linux 显示目录的大小不一样,linux目录大小显示不实时问题
- 二十四、JAVA集合框架(四)