zoukankan      html  css  js  c++  java
  • ViewPager和Tabhost结合,可滑动的tabhost

    有朋友反映资源下载下来有问题,我看了下,确实是,已更新下面文章中的代码和资源,现在可以好好的跑起来了,另外还改动了个小地方的逻辑,因为我在使用中出了点小错,需要的可以试下。另外,在使用中,注意下子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.   
    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. }  
  • 相关阅读:
    10.28作业
    10.27作业
    10.26作业
    10.22作业
    10.20作业
    10.19作业
    10.16作业
    10.15作业
    10.14作业
    10.13作业
  • 原文地址:https://www.cnblogs.com/sunylat/p/6119093.html
Copyright © 2011-2022 走看看