Android 基于GridView和ActivityGroup实现的TAB分页

分页大家都会用Android的TabHost和TabActivity的组合,今天我这里实现的是GridView和ActivityGroup实现的分页,这里需要将Activity转换成Window,然后再换成成View添加到容器中,效果如下

Android 基于GridView和ActivityGroup实现的TAB分页_第1张图片

1.布局文件底部放一个GridView,然后一个LinearLayout容器在GridView之上,LinearLayout用于装载Activity的,这里布局位置错误,运行程序会抛异常,修改在下面

[html] view plain copy
  1. <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"  
  2.     xmlns:tools="http://schemas.android.com/tools"  
  3.     android:layout_width="match_parent"  
  4.     android:layout_height="match_parent" >  
  5.     <LinearLayout  
  6.         android:id="@+id/activity_group"  
  7.         android:layout_width="match_parent"  
  8.         android:layout_height="wrap_content"  
  9.         android:layout_above="@+id/gridView1"  
  10.         android:layout_alignParentTop="true"  
  11.         android:orientation="vertical" >  
  12.     </LinearLayout>  
  13.       
  14.      <GridView  
  15.         android:id="@+id/gridView1"  
  16.         android:layout_width="match_parent"  
  17.         android:layout_height="wrap_content"  
  18.         android:layout_alignParentBottom="true"  
  19.         android:background="@drawable/navigationbardown"  
  20.         android:cacheColorHint="@android:color/transparent"  
  21.         android:gravity="center"  
  22.         android:listSelector="@android:color/transparent"  
  23.         android:verticalSpacing="0dip" >  
  24.     </GridView>  
  25. </RelativeLayout>  
2.接下来就是代码啦,我们需要设置GridView的列数mGridView.setNumColumns(mImageIds.length),因为他只能显示一行,然后就是设置GridView点击高亮,每张图片的高亮图片都不一样的,然后就是点击不同的item进入不同的Activity,我们先用到ActivityGroup里面的 public Window startActivity(String id, Intent intent) ,将Activity转换成Window,然后通过 public abstract View getDecorView()这个抽象方法将Window转换成View,在添加到LinearLayout容器中
[java] view plain copy
  1. package com.example.tabactivity;  
  2.   
  3. import android.app.ActivityGroup;  
  4. import android.content.Intent;  
  5. import android.os.Bundle;  
  6. import android.view.View;  
  7. import android.view.ViewGroup;  
  8. import android.view.ViewGroup.LayoutParams;  
  9. import android.widget.AdapterView;  
  10. import android.widget.AdapterView.OnItemClickListener;  
  11. import android.widget.BaseAdapter;  
  12. import android.widget.GridView;  
  13. import android.widget.ImageView;  
  14. import android.widget.LinearLayout;  
  15.   
  16. public class TestActivity extends ActivityGroup implements OnItemClickListener {  
  17.     /** 
  18.      * Tab标签 
  19.      */  
  20.     private GridView mGridView;  
  21.     /** 
  22.      * 普通图片id数组 
  23.      */  
  24.     private int [] mImageIds;  
  25.     /** 
  26.      * 高亮图片id数组 
  27.      */  
  28.     private int [] mImageLightIds;  
  29.     /** 
  30.      * GridView 适配器 
  31.      */  
  32.     private ImageAdapter mImageAdapter;  
  33.     /** 
  34.      * 装载Activity的容器 
  35.      */  
  36.     private LinearLayout mLinearLayout;  
  37.   
  38.     @Override  
  39.     public void onCreate(Bundle savedInstanceState) {  
  40.         super.onCreate(savedInstanceState);  
  41.         setContentView(R.layout.activity_test);  
  42.           
  43.         mImageIds = new int[]{R.drawable.home, R.drawable.task, R.drawable.addrbook, R.drawable.longnormal};  
  44.         mImageLightIds = new int[]{R.drawable.home1, R.drawable.taskhl, R.drawable.addrbook1, R.drawable.longhightlight};  
  45.           
  46.         mLinearLayout = (LinearLayout) findViewById(R.id.activity_group);  
  47.         mGridView = (GridView) findViewById(R.id.gridView1);  
  48.         //因为我们显示一行,列数等于数组的长度  
  49.         mGridView.setNumColumns(mImageIds.length);  
  50.         mImageAdapter = new ImageAdapter();  
  51.         mGridView.setAdapter(mImageAdapter);  
  52.         mGridView.setOnItemClickListener(this);  
  53.           
  54.         startActivity(0);  
  55.     }  
  56.       
  57.       
  58.     @Override  
  59.     public void onItemClick(AdapterView<?> parent, View view, int position,  
  60.             long id) {  
  61.         //点击设置高亮显示  
  62.         mImageAdapter.setImageLight(position);  
  63.         startActivity(position);  
  64.     }  
  65.       
  66.     /** 
  67.      * 根据position跳转到不同的Activity 
  68.      * @param id 
  69.      */  
  70.     private void startActivity(int position){  
  71.         //先清除容器里面的View  
  72.         mLinearLayout.removeAllViews();  
  73.         Intent intent = null;  
  74.         if(position == 0){  
  75.             intent = new Intent(TestActivity.this, Activity_01.class);  
  76.         }else if(position == 1){  
  77.             intent = new Intent(TestActivity.this, Activity_02.class);  
  78.         }else if(position == 2){  
  79.             intent = new Intent(TestActivity.this, Activity_03.class);  
  80.         }else if(position == 3){  
  81.             intent = new Intent(TestActivity.this, Activity_04.class);  
  82.         }  
  83.         intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);  
  84.           
  85.         //将Activity转换成View  
  86.         View view = getLocalActivityManager().startActivity("intent", intent).getDecorView();  
  87.         LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(new LinearLayout.LayoutParams(LayoutParams.FILL_PARENT,      
  88.                 LayoutParams.FILL_PARENT));  
  89.           
  90.         //将Activity转换成的View添加到容器  
  91.         mLinearLayout.addView(view, layoutParams);  
  92.     }  
  93.       
  94.     /** 
  95.      * 图片适配器,没什么特别的,里面有一个设置高亮的方法比较重要 
  96.      * @author mining 
  97.      * 
  98.      */  
  99.     private class ImageAdapter extends BaseAdapter{  
  100.         private int currentItem;  
  101.           
  102.         /** 
  103.          * 设置高亮显示 
  104.          * @param currentItem 
  105.          */  
  106.         public void setImageLight(int selectItem){  
  107.             this.currentItem = selectItem;  
  108.             notifyDataSetChanged();  
  109.         }  
  110.   
  111.         @Override  
  112.         public int getCount() {  
  113.             return mImageIds.length;  
  114.         }  
  115.   
  116.         @Override  
  117.         public Object getItem(int position) {  
  118.             return mImageIds[position];  
  119.         }  
  120.   
  121.         @Override  
  122.         public long getItemId(int position) {  
  123.             return position;  
  124.         }  
  125.   
  126.         @Override  
  127.         public View getView(int position, View convertView, ViewGroup parent) {  
  128.             if(convertView == null){  
  129.                 convertView = new ImageView(TestActivity.this);  
  130.             }  
  131.             if(position == currentItem){  
  132.                 convertView.setBackgroundResource(mImageLightIds[position]);  
  133.             }else{  
  134.                 convertView.setBackgroundResource(mImageIds[position]);  
  135.             }  
  136.               
  137.             return convertView;  
  138.         }  
  139.           
  140.           
  141.     }  
  142.   
  143.   
  144.   
  145. }  

代码都上完了,是不是很简单的赶脚,短短的100多行的代码就实现了Tab分页,上面有设置GridView高亮的方法,还不知道设置高亮的同学可以借鉴一下咯,呵呵, 写的不好,希望各位大牛指点指点!万分感谢

不好意思,上面的布局需要纠正下,位置放错了

[html] view plain copy
  1. <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"  
  2.     xmlns:tools="http://schemas.android.com/tools"  
  3.     android:layout_width="match_parent"  
  4.     android:layout_height="match_parent" >  
  5.       
  6.     <GridView  
  7.         android:id="@+id/gridView1"  
  8.         android:layout_width="match_parent"  
  9.         android:layout_height="wrap_content"  
  10.         android:layout_alignParentBottom="true"  
  11.         android:background="@drawable/navigationbardown"  
  12.         android:cacheColorHint="@android:color/transparent"  
  13.         android:gravity="center"  
  14.         android:listSelector="@android:color/transparent"  
  15.         android:verticalSpacing="0dip" >  
  16.     </GridView>  
  17.       
  18.     <LinearLayout  
  19.         android:id="@+id/activity_group"  
  20.         android:layout_width="match_parent"  
  21.         android:layout_height="wrap_content"  
  22.         android:layout_above="@+id/gridView1"  
  23.         android:layout_alignParentTop="true"  
  24.         android:orientation="vertical" >  
  25.     </LinearLayout>  
  26.       
  27.       
  28.       
  29. </RelativeLayout>  


代码下载


你可能感兴趣的:(Android 基于GridView和ActivityGroup实现的TAB分页)