Viewpager中嵌套Listview,而且Listview的item中夹杂ViewPager

来源:互联网 发布:韩国研究生留学知乎 编辑:程序博客网 时间:2024/06/06 20:37



Viewpager中嵌套Listview,而且Listview的item中夹杂ViewPager


//现在有一个需求,需要在一个ViewPager的几个页面用listview显示,而且listview的item种类>=2,其中还有viewpager那么盖怎么实现呢,废话不多说,先把ViewPager架子搭起来

效果


MainActivity.java

[java] view plaincopyprint?在CODE上查看代码片派生到我的代码片
  1. public class MainActivity extends Activity {  
  2.   
  3.     private ViewPager viewpager;  
  4.     private List<View> list = new ArrayList<View>();  
  5.     private MyPageAdapter adapter;  
  6.       
  7.     @Override  
  8.     protected void onCreate(Bundle savedInstanceState) {  
  9.         super.onCreate(savedInstanceState);  
  10.         setContentView(R.layout.activity_main);  
  11.         viewpager = (ViewPager)findViewById(R.id.viewpager);  
  12.           
  13.         initData();  
  14.         adapter = new MyPageAdapter();  
  15.         viewpager.setAdapter(adapter);  
  16.     }  
  17.     //添加3个listview  
  18.     private void initData() {  
  19.         list.add(new View1(this).listview);  
  20.         list.add(new View1(this).listview);  
  21.         list.add(new View1(this).listview);  
  22.     }  
  23.   
  24.     class MyPageAdapter extends PagerAdapter{  
  25.   
  26.         @Override  
  27.         public int getCount() {  
  28.             return list.size();  
  29.         }  
  30.   
  31.         @Override  
  32.         public boolean isViewFromObject(View arg0, Object arg1) {  
  33.             return arg0==arg1;  
  34.         }  
  35.           
  36.         @Override  
  37.         public Object instantiateItem(ViewGroup container, int position) {  
  38.             ((ViewGroup)container).addView((View)list.get(position));  
  39.             return list.get(position);  
  40.               
  41.         }  
  42.           
  43.         @Override  
  44.         public void destroyItem(ViewGroup container, int position, Object object) {  
  45.             container.removeView(list.get(position));  
  46.         }  
  47.           
  48.     }  
  49.    
  50. }  

activity_main.xml

[java] view plaincopyprint?在CODE上查看代码片派生到我的代码片
  1. <android.support.v4.view.ViewPager xmlns:android="http://schemas.android.com/apk/res/android"  
  2.     xmlns:tools="http://schemas.android.com/tools"  
  3.     android:id="@+id/viewpager"  
  4.     android:layout_width="match_parent"  
  5.     android:layout_height="match_parent"  
  6.     android:paddingBottom="@dimen/activity_vertical_margin"  
  7.     android:paddingLeft="@dimen/activity_horizontal_margin"  
  8.     android:paddingRight="@dimen/activity_horizontal_margin"  
  9.     android:paddingTop="@dimen/activity_vertical_margin"  
  10.     tools:context="com.zyh.listview_viewpager.MainActivity" >  
  11.   
  12. </android.support.v4.view.ViewPager>  



现在ViewPager有了,再看一下要添加的listview


[java] view plaincopyprint?在CODE上查看代码片派生到我的代码片
  1. public class View1 {  
  2.     public static final int VIEWTYPE_VIEWPAGER = 0;  
  3.     public static final int VIEWTYPE_TEXTVIEW = 1;  
  4.     ListView listview;  
  5.     private Context mContext;  
  6.     private MyListviewAdapter adapter;  
  7.   
  8.     public View1(Context context) {  
  9.         init(context);  
  10.     }  
  11.   
  12.     public void init(Context context) {  
  13.         mContext = context;  
  14.         listview = new ListView(context);  
  15.         adapter = new MyListviewAdapter();  
  16.         listview.setAdapter(adapter);  
  17.     }  
  18.   
  19.     class MyListviewAdapter extends BaseAdapter {  
  20.   
  21.         @Override  
  22.         public int getCount() {  
  23.             return 100;  
  24.         }  
  25.   
  26.         @Override  
  27.         public Object getItem(int position) {  
  28.             return null;  
  29.         }  
  30.   
  31.         @Override  
  32.         public long getItemId(int position) {  
  33.             return 0;  
  34.         }  
  35.   
  36.         @Override  
  37.         public View getView(int position, View convertView, ViewGroup parent) {  
  38.   
  39.             if (position % 3 == 0) {  
  40.                 // viewpager  
  41.   
  42.                 if (convertView == null) {  
  43.                     ChildView child = new ChildView();  
  44.                     child.init(mContext);  
  45.                     convertView = child.viewPager;  
  46.                 }  
  47.   
  48.             } else {  
  49.                 // textview  
  50.                 if (convertView == null) {  
  51.                     convertView = new TextView(mContext);  
  52.   
  53.                 }  
  54.                 ((TextView)convertView).setText("测试数据:"+position);  
  55.             }  
  56.             System.out.println(convertView.toString());  
  57.             return convertView;  
  58.         }  
  59.         @Override  
  60.         public int getViewTypeCount() {  
  61.             return 2;  
  62.         }  
  63.         @Override  
  64.         public int getItemViewType(int position) {  
  65.   
  66.             if (position % 3 == 0) {  
  67.                 // viewpager  
  68.   
  69.                 return VIEWTYPE_VIEWPAGER;  
  70.   
  71.             } else {  
  72.                 // textview  
  73.                 return VIEWTYPE_TEXTVIEW;  
  74.             }  
  75.         }  
  76.   
  77.     }  
  78. }  


然后是listview中的item为 ViewPager的情况


ChildVIew.java

[java] view plaincopyprint?在CODE上查看代码片派生到我的代码片
  1. public class ChildView {  
  2.   
  3.     ViewPager viewPager;  
  4.     private List<View> list = new ArrayList<View>();  
  5.     private Context mContext;  
  6.   
  7.   
  8.     public void init(Context context) {  
  9.         mContext = context;  
  10.   
  11.         for (int i = 0; i < 5; i++) {  
  12.             Button view = new Button(mContext);  
  13.             view.setText("ViewPager中的TextView:" + i);  
  14.             view.setTextSize(20);  
  15.             list.add(view);  
  16.         }  
  17.         viewPager = (ViewPager) View.inflate(mContext, R.layout.layout_viewpager, null);  
  18.           
  19.         /** 
  20.          * 必须设置LayoutParams 
  21.          */  
  22.           
  23.         AbsListView.LayoutParams lp = new AbsListView.LayoutParams(LayoutParams.MATCH_PARENT, 200);  
  24.         viewPager.setLayoutParams(lp);  
  25.         viewPager.setAdapter(new MyPageAdapter());  
  26.     }  
  27.   
  28.     class MyPageAdapter extends PagerAdapter {  
  29.   
  30.         @Override  
  31.         public int getCount() {  
  32.             return list.size();  
  33.         }  
  34.   
  35.         @Override  
  36.         public boolean isViewFromObject(View arg0, Object arg1) {  
  37.             return arg0 == arg1;  
  38.         }  
  39.   
  40.         @Override  
  41.         public Object instantiateItem(ViewGroup container, int position) {  
  42.             container.addView(list.get(position));  
  43.             return list.get(position);  
  44.   
  45.         }  
  46.   
  47.         @Override  
  48.         public void destroyItem(ViewGroup container, int position, Object object) {  
  49.             container.removeView(list.get(position));  
  50.         }  
  51.   
  52.     }  
  53.   
  54. }  

layout_viewpager.xml

[html] view plaincopyprint?在CODE上查看代码片派生到我的代码片
  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <android.support.v4.view.ViewPager xmlns:android="http://schemas.android.com/apk/res/android"  
  3.     xmlns:tools="http://schemas.android.com/tools"  
  4.     android:layout_width="match_parent"  
  5.     android:layout_height="wrap_content"  
  6.     android:background="@android:color/holo_blue_bright" >  
  7.   
  8.     <!-- 布局中设置宽高没有生效,必须代码设置layoutParams -->  
  9.   
  10. </android.support.v4.view.ViewPager>  





0 0