ViewPager和Tabhost结合,可滑动的tabhost

 

ViewPager和Tabhost结合,可滑动的tabhost

分类: Android   15030人阅读  评论(19)  收藏  举报


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

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


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

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

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

效果图:



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


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值