ViewPager相信大家都很熟悉,4.x前都需要导入android-support-v4.jar,4.x后sdk已提供支持; 应用场景也很常见,一般应用于程序的引导页;应用也很简单,一个Adapter就可以搞定,代码如下:
public class MyViewPagerAdapter extends PagerAdapter{
private List<View> mListViews;
public MyViewPagerAdapter(List<View> mListViews) {
this.mListViews = mListViews;//构造方法,参数是我们的页卡,这样比较方便。
}
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
container.removeView(mListViews.get(position));//删除页卡
}
@Override
public Object instantiateItem(ViewGroup container, int position) { //这个方法用来实例化页卡
container.addView(mListViews.get(position), 0);//添加页卡
return mListViews.get(position);
}
@Override
public int getCount() {
return mListViews.size();//返回页卡的数量
}
@Override
public boolean isViewFromObject(View arg0, Object arg1) {
return arg0==arg1;//官方提示这样写
}
}
但这不是我们今天要讲的主题,我们今天说的是关键词是:动态加载、循环滑屏….
应用场景不再局限与程序引导,而在数据交互之间体现;下面请看实现效果图:
下面我们来看看如何去做,先上Activity代码,代码是主项目中抠下来的:
viewPager = (ViewPager) findViewById(R.id.viewPager);
listViews = new ArrayList<View>();
//初始化ViewPager
bookShelfView = new BookshelfCompositeView(this);//
bookCityView = new OxygenBookCityView(this);//
readFriendsView = new ReadFriendsCircleView(this);//
listViews.add(bookShelfView);//
listViews.add(bookCityView);//
listViews.add(readFriendsView);//
mPagerAdapter = new MyPagerAdapter(listViews, this);
mPagerAdapter.setLoadTag(false);
viewPager.setAdapter(mPagerAdapter);
viewPager.setCurrentItem(COUNT);
viewPager.setOnPageChangeListener(listener);
/**
* 创建View
*/
public void createView(int currentItem) {
if (currentItem == BOOKSHELF_ITEM) {
// 书架
if (bookShelfView instanceof IPanelView) {
((IPanelView) bookShelfView).onCreate();
}
} else if (currentItem == BOOKCITY_ITEM) {
// 书城
if (bookCityView instanceof IPanelView) {
((IPanelView) bookCityView).onCreate();
}
} else if (currentItem == READFRIENDS_ITEM) {
// 读友圈
if (readFriendsView instanceof IPanelView) {
((IPanelView) readFriendsView).onCreate();
}
}
}
OnPageChangeListener listener = new OnPageChangeListener() {
@Override
public void onPageSelected(int arg0) {
// TODO Auto-generated method stub
LogUtil.e("当前页面索引:" + arg0);
}
@Override
public void onPageScrolled(int arg0, float arg1, int arg2) {
// TODO Auto-generated method stub
}
@Override
public void onPageScrollStateChanged(int arg0) {
// TODO Auto-generated method stub
}
};
Activity主要对ViewPager做了初始化的操作,主要是Adapter代码实现:
public class MyPagerAdapter extends PagerAdapter {
public List<View> listViews = null;
public HashMap<View, Boolean> loadTag;
public MainNewActivity mContext;
public int mIndex;//滑动索引
public MyPagerAdapter(List<View> listViews, MainNewActivity mContext) {
this.listViews = listViews;
this.mContext = mContext;
loadTag = new HashMap<View, Boolean>();
}
/**
* 设置加载标志
*
* @param tag
*/
public void setLoadTag(boolean tag) {
if (listViews != null && listViews.size() > 0) {
int size = listViews.size();
for (View views : listViews) {
loadTag.put(views, tag);
}
}
}
@Override
public int getCount() {
return Integer.MAX_VALUE;
}
@Override
public boolean isViewFromObject(View arg0, Object arg1) {
return arg0 == arg1;
}
@Override
public void destroyItem(View container, int position, Object object) {
// LogUtil.e("TipsPagerAdapter", "destroyItem is called " + position);
// ((ViewPager) container).removeView(listViews.get(position %
// listViews.size()));
}
@Override
public CharSequence getPageTitle(int position) {
return super.getPageTitle(position);
}
@Override
public Object instantiateItem(View container, int position) {
LogUtil.e("TipsPagerAdapter", "instantiateItem is called " + position);
try {
((ViewPager) container).addView(
listViews.get(position % listViews.size()), 0);
} catch (Exception e) {
}
// ((ViewPager) container).addView(listViews.get(position);
// return listViews.get(position);
LogUtil.e("instantiateItem>>>>>>" + position % listViews.size());
return listViews.get(position % listViews.size());
}
/**
* 进行View预加载处理
*/
@Override
public void setPrimaryItem(View container, int position, Object object) {
// TODO Auto-generated method stub
super.setPrimaryItem(container, position, object);
LogUtil.e("setPrimaryItem>>>>>>" + position % listViews.size());
mIndex = position % listViews.size();
if (loadTag.get(listViews.get(mIndex)) == false) {
mContext.createView(mIndex);
loadTag.put(listViews.get(mIndex), true);
}
}
}
这里有必要解释和注意一下:
循环滑动是通过初始化一个较大的CurrentItem(页数)在getview中通过position % listViews.size()实现,看上去实现了循环滑动,实则假循环,但当用户向左滑动CurrentItem次后就无法滑动,所以建议将CurrentItem值越大越好,试想一下哪个用户那么无聊不停去滑动直到突破你的滑动值呢。
动态加载在setPrimaryItem中实现,每次滑动都会调用setPrimaryItem,所以在这里可以进行网络加载,这里我loadTag判断是否需要重复加载。
讲到这里就今天的内容就告一段落。由于这个实现是项目中的一部分,所以源码今天就不放了,等有时间我将整理成一个demo放上来。
转自:http://www.u3dblog.com/?p=559
分享到:
相关推荐
【作品名称】:基于VB实现的商场管理系统设计(源代码+系统) 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。
数据来源:中国电力统计NJ-2021版
数据来源:中国电力统计NJ-2021版
基于C# WinForm框架开发的图书管理系统源码+sql文件.zip基于C# WinForm框架开发的图书管理系统源码+sql文件.zip基于C# WinForm框架开发的图书管理系统源码+sql文件.zip基于C# WinForm框架开发的图书管理系统源码+sql文件.zip基于C# WinForm框架开发的图书管理系统源码+sql文件.zip
毕业设计(论文)-基于Android系统的人事管理系统设计与实现(48页).doc
pentair 5800 SXT软水机说明书
数据来源:中国人口与就业统计NJ-2023版
Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。
Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。
数据来源:中国人口与就业统计NJ-2023版
数据来源:中国人口与就业统计NJ-2023版
Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。
Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。
Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。
小区物业管理系统设计与实现.docx
律师事务所办公管理系统设计及实现.doc
基于Qt与Android的KTV管理系统设计与实现毕业论文(25页).doc
数据来源:中国劳动统计NJ-2023版
附件是华为 OD 机考攻略_加强版,文件绿色安全,请大家放心下载,仅供交流学习使用,无任何商业目的!
Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。