ViewPager中用findViewById得不到View___findViewById应用注意事项

 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


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值