Android ViewPager实现上一页下一页左右滑动的正确方法

回顾一下这个功能的应用场景:有一个装有很多条数据的一个list,这个list在listView中显示出来了,现在滑动listView随便到一个位置,点击一个item进入数据的详情页,在这个详情页,我们用到了viewPager,让它实现左右滑动的效果。

以前我也是在网上找的DEMO,大家通常的做法是,一进入详情页,就把每个页面的view初始化出来,然后把这些view放在list里面,传给自己定义的viewPagerAdapter,这样就出现滑动效果了。但是这样就会出现一个问题,就是我的list太大,初始化出来的view页面就会很多,比如说1000条数据,不可能全初始化出view来放list里再传给adapter吧,这样八成OOM的,于是我就照着这个思路,先初始化一部分view,再不断的滑动过程中,再初始化一部分,但是如果你是从数据列表的中间进入,向前滑动时不断的初始化view添加进list,这样viewPagerAdapter的大小就会发生变化,你的currentIndex就在不断的变化。超级不好控制。

再回想一下我们平时做一些常见的adapter的做法,没有在activity中把所有的item初始化出来,再传给adapter,让adapter做显示吧,常用的做法是,在adapter里再进行数据的封装什么的,在adapter中的getView()中进行操作,无论是自定义界面,还是填充数据。其实,viewPager的PagerAdapter也是同样的思路。回想一下,其实就是基本的adapter的操作了,以前刚学习这个控件的时候被网上别人的demo误导了。

public class DemoAdapter extends PagerAdapter {
  private Context context;
  private ArrayList list;
  private LayoutInflater inflater;
  public DemoAdapter (Context context, ArrayList list) {
    this.list = list;
    this.context = context;
  }
  @Override
  public void destroyItem(ViewGroup container, int position, Object object) {
    ((ViewPager) container).removeView((View) object);
  }
    inflater = LayoutInflater.from(context);
  @Override
  public void finishUpdate(View container) {}
  @Override
  public int getCount() {
    return list != null ? list.size() : 0;
  }
  @Override
  public Object instantiateItem(ViewGroup view, int position) {
    UserBean bean = list.get(position);
    //自定义的view
    View userLayout = inflater.inflate(R.layout.show_user_detail, view, false);
    ImageView ivPhoto = (ImageView) userLayout.findViewById(R.id.user_photo);
    TextView tvName = (TextView) userLayout.findViewById(R.id.user_name);
    //填充数据
    tvName.setText(bean.getUserName);
    ((ViewPager) view).addView(userLayout, 0);
    return userLayout;
  }
  @Override
  public boolean isViewFromObject(View view, Object object) {
    return view.equals(object);
  }
  @Override
  public void restoreState(Parcelable state, ClassLoader loader) {}
  @Override
  public Parcelable saveState() {
    return null;
  }
  @Override
  public void startUpdate(View container) {}
}

看完上面这段代码是不是很简单,还要注意一点就是,你在外面的listView从哪儿跳进viewPager的时候,要在viewPager设置完adapter的时候setCurretntIndex一下,就像下面这样:


1

viewPager.setCurrentItem(intoPosition)

时间: 2024-09-18 01:36:48

Android ViewPager实现上一页下一页左右滑动的正确方法的相关文章

PHP简单实现上一页下一页功能示例_php技巧

本文实例讲述了PHP简单实现上一页下一页功能.分享给大家供大家参考,具体如下: 思路整理: 现在好多人用id的增1和减1实现上一篇和下一篇,但是难道文章ID不会断了吗?所以你要知道上个ID和个ID是多少就OK了. 那怎么解决这个问题呢,很简单! 例子: 假如这篇文章的ID200 <a href="?action=up&id=200">上一篇</a> <a href="?action=down&id=200">下一篇

js-关于a标签上一页 下一页

问题描述 关于a标签上一页 下一页 问题描述:需要用a标签上一页 下一页,N种方法都试过不行. <a href="#" oncilck="back">上一页</a> <a href="#" oncilck="next">下一页</a> href不行,一直405,提示提交的是HTTP请求默认get而后台是post oncliick Form提交可行,可是只能提交固定的action

js实现上一页下一页的效果【附代码】_javascript技巧

Javascript 返回上一页: 1. history.go(-1), 返回两个页面: history.go(-2); 2. history.back(). 3. window.history.forward()返回下一页 4. window.history.go(返回第几页,也可以使用访问过的URL) 例: 复制代码 代码如下: <a href="javascript:history.go(-1);">向上一页</a> response.Write(&quo

wordpress上一页下一页无插件分页函数

提供两个,一个是willin提供的,一个则是今天我提供的,其实就都是简单的修改,但可应对不同需求的应用. 第一个可以定制显示wordpress显示上一页下一页,及统计页数及中间页数  代码如下 复制代码 if ( !function_exists('pagenavi') ) {  function pagenavi( $p = 5 ) { // 取当前页前后各 2 页   if ( is_singular() ) return; // 文章与插页不用   global $wp_query, $p

asp常用分页程序-上一页 下一页

'*********************************************** '过程名:showpage '作  用:显示"上一页 下一页"等信息 '参  数:sfilename  ----链接地址 '       totalnumber ----总数量 '       maxperpage  ----每页数量 '       ShowTotal   ----是否显示总数量 '       ShowAllPages ---是否用下拉列表显示所有页面以供跳转.有某些页

AspNetPager开始好用 但现在 前一页,下一页 等字体都变大了,写上X-small也不起作用. 有个现象点翻页的时候会出现瞬间 的原来字体大小!

问题描述 AspNetPager开始好用但现在前一页,下一页等字体都变大了,写上X-small也不起作用.有个现象点翻页的时候会出现瞬间的原来字体大小!怎么解决是不是有什么东西冲突了 解决方案 解决方案二:mark

ShowPage 显示“上一页 下一页”等信息的封装代码_应用技巧

'************************************************** '函数名:ShowPage '作  用:显示"上一页 下一页"等信息 '参  数:sFileName  ----链接地址 '       TotalNumber ----总数量 '       MaxPerPage  ----每页数量 '       ShowTotal   ----是否显示总数量 '       ShowAllPages ---是否用下拉列表显示所有页面以供跳转.有

ShowPage 显示“上一页 下一页”等信息的封装代码

'************************************************** '函数名:ShowPage '作  用:显示"上一页 下一页"等信息 '参  数:sFileName  ----链接地址 '       TotalNumber ----总数量 '       MaxPerPage  ----每页数量 '       ShowTotal   ----是否显示总数量 '       ShowAllPages ---是否用下拉列表显示所有页面以供跳转.有

android viewpager 和gridview怎么用addHeaderView连到一起滑动?

问题描述 android viewpager 和gridview怎么用addHeaderView连到一起滑动? 在纵向滑动的时候 横向滑动部分怎么跟着纵向部分一起滑动 ?求答 解决方案 横向滑动组件也能纵向滑动吗?

asp 分页 上一页 下一页代码

<%if request("typeid")=3 then set rs=server.CreateObject("adodb.recordset")   rs.open "select cdkey88_news.*,cdkey88_game.game_name from cdkey88_news,cdkey88_game where cdkey88_news.game_id=cdkey88_game.game_id and ( cdkey88_ne