这种写法参考智慧北京的代码(避免上一篇博客出现的问题)
智慧北京这个代码还是相当的复杂,没有扎实的基本功是很难看懂、融会贯通的。需要在平时去积累怎样去用和学习
五个子页面填充数据的方法
@Override
public View initViews() {
View view = View.inflate(mActivity, R.layout.news_menu_detail, null);
mViewPager = (ViewPager) view.findViewById(R.id.vp_menu_detail);
return view;
}
//在这个类NewsMenuDetailPager的布局中添加数据
@Override
public void initData() {
mPagerList = new ArrayList<TabDetailPager>();
// 初始化页签数据
for (int i = 0; i < mNewsTabData.size(); i++) {
TabDetailPager pager = new TabDetailPager(mActivity, mNewsTabData.get(i));
mPagerList.add(pager);
}
//设置Adapter
mViewPager.setAdapter(new MenuDetailAdapter());
}
//添加数据到Adapter中
class MenuDetailAdapter extends PagerAdapter {
@Override
public int getCount() {
return mPagerList.size();
}
@Override
public boolean isViewFromObject(View arg0, Object arg1) {
return arg0 == arg1;
}
//返回布局文件
@Override
public Object instantiateItem(ViewGroup container, int position) {
TabDetailPager pager = mPagerList.get(position);
container.addView(pager.mRootView);
pager.initData();
return pager.mRootView;
}
instantiateItem (ViewGroup container, int position)
public Object instantiateItem (ViewGroup container, int position)
Create the page for the given position. The adapter is responsible for adding the view to the container given here, although it only must ensure this is done by the time it returns fromfinishUpdate(ViewGroup).
Parameters
container The containing View in which the page will be shown.
position The page position to be instantiated.
Returns
Returns an Object representing the new page. This does not need to be a View, but can be some other container of the page.
这个函数的实现的功能是<span style="background-color: rgb(51, 204, 0);">创建指定位置的页面视图</span>。适配器有责任增加即将创建的View视图到这里给定的container中,这是为了确保在finishUpdate(viewGroup)返回时this is be done!
返回值:返回一个代表新增视图页面的Object(Key),这里没必要非要返回视图本身,也可以这个页面的其它容器。其实我的理解是可以代表当前页面的任意值,只要你可以与你增加的View一一对应即可,比如position变量也可以做为Key(最后我们举个例子试试可不可行)
下载链接 http://pan.baidu.com/s/1dF5ACzJ
同时这里也有些其他的比较好的网上资源