ViewPager的主要功能是使视图左右滑动
1.在布局文件中加入组件
<</SPAN>android.support.v4.view.ViewPager
android:id="@+id/heroPager"
android:layout_width="fill_parent"
android:layout_height="wrap_content"/>
和android的其他组件一样,这里只需要声明一个组件,并指定它的基本属性。
2.在ViewPager中添加动态的listview
先声明一个LayoutInflater对象:
LayoutInflater inflater = getLayoutInflater();
获取viewPager组件:
viewPager = (ViewPager) findViewById(R.id.heroPager);
创建一个list对象:
viewList = new ArrayList<</SPAN>View>();
LayoutInflater对象的inflater方法只能实例化一个view对象,由于android中不能通过直接将一个xml布局声明为一个Listview,所以就不能直接通过inflater方法来实例listview对象。
以下两种方法都是错误的,希望大家引起注意:
①直接通过强制类型转换,将View对象转换为ListView对象:
ListView view1 = (ListView) inflater.inflate(R.layout.hero_list, null);
这个方法编译可以通过,但是在运行时系统会报出一个类型转换的错误!
②直接通过findViewbyId方法通过listview的组件ID来获取listview对象:
ListView listView1 = (ListView)findViewById(R.id.heroList);
这个方法也是编译时可以通过,运行时在这一步不会出现问题,但是当下面为listview添加SimpleAdpater适配器的时候,会抛出一个空指针异常,调试模式到这一步时,会观察到通过findViewbyId方法得到的listview是一个空对象。
原来findviewById是View这个类中的方法,默认调用时其实应该是:
this.findviewById();
由于上图代码中的R.id.herolist这个listview的声明并不在当前的viewPager所在的xml布局中,所以直接通过findviewById方法是不能得到该listview的实例的。
既然知道了findviewById()原理,那么就好办了!直接先通过LayoutInflater对象来实例化listview所在的布局,然后通过这个view的findviewById方法来获取listview的实例。
View view1 = inflater.inflate(R.layout.hero_list, null);
View view2 = inflater.inflate(R.layout.hero_list, null);
ListView listview1 = view1.findViewById(R.id.heroList);
ListView listview2 = view1.findViewById(R.id.heroList);
注意view对应的布局是hero_list,listview对应的布局是herolist,两者不一样。
3.剩下的步骤,重写PagerAdapter类并添加适配器,给每一个listview都添加一个适配器,常用BaseAdapter,也可以用SimpleAdapter。
http://blog.sina.com.cn/s/blog_6f1361e50101fjno.html