项目中可能会有这种需求:动态设置ListView显示的item

这种需求可能会出现在不同的情况下,有的是打开页面就要显示在特定的位置,也有的是浏览列表时实时更新数据并且改变了集合中数据,或者是某种条件触发而改变显示的位置,我遇到的就是第二种。

先说说我的情况:

用ListView展示数据,当上拉或下拉刷新时会增加集合中数据的数量,但是考虑如果item太多可能会太占资源,于是我就控制了一下集合的长度,每次刷新后如果size超过最大值时我就会从集合中移除一部分数据,但是当我在刷新adapter时问题就出现了,ListView显示的item直接跳到了顶部或底部,而不是接着刷新之前的位置显示,原因我没有具体研究,可能是因为每次调用adapter的刷新时adapter都记住position,刷新后会继续从记住的position开始展示,但我移除了一部分,从而导致显示的位置错乱。

其实解决办法很简单,网上有很多人都碰到了这个问题并且给出了解决办法:

如果上拉或下拉时,从集合中移除了一部分数据,那么在刷新之前调用下面的方法就可以解决问题

listview.postDelayed(new Runnable() {
     @Override
     public void run() {

  //上拉时,setSelection(获取当前展示的第一个item的position  减掉你从集合中移除的数据的数量(a)),这样在刷新时就会继续之前的位置显示
      listview.setSelection(listview.getFirstVisiblePosition()
        - a + 1);
     }

  //下拉时,setSelection(你从集合中移除的数据的数量(a))

  listview.setSelection(a);
    }, 20);

Android 设置ListView当前显示的item的更多相关文章

  1. android中设置ListView的选中的Item的背景颜色

    ListView中没有默认的选择颜色,只有选择Item后的焦点颜色,鼠标点击时Item有颜色,放开鼠标后颜色也就没有了,要实现放开鼠标后选择项的背景还是有颜色的. 1.配置main.xml <? ...

  2. [Android Pro] listView和GridView的item设置的高度和宽度不起作用

    referece to : http://blog.csdn.net/beibeixiao/article/details/9032569 1.     在Android开发中会发现,有时listVi ...

  3. Android 设置ListView不可滚动 及在ScrollView中不可滚动的设置

    http://m.blog.csdn.net/blog/yusewuhen/43706169 转载请注明出处: http://blog.csdn.net/androiddevelop/article/ ...

  4. Android开发-Listview中显示不同的视图布局

    1. 使用场景 在重写ListView的BaseAdapter时,我们常常在getView()方法中复用convertView,以提高性能.convertView在Item为单一的同种类型布局时,能够 ...

  5. Android教程2020 - RecyclerView显示多种item

    Android教程2020 - 系列总览 本文链接 前面我们已经用RecyclerView显示一些数据.也知道如何获取滑动的距离. 前面我们的列表中显示的都是同类数据.如果要在一个列表中显示不同类别的 ...

  6. Android 原生listview item伸展收缩效果

    Android原生listview做的一个item的伸缩效果.*永远不要让你老大有机会改需求 package com.example.yunkanglast; import java.io.Seria ...

  7. android中listview分页载入数据

    前段时间做的新浪微博项目一直想实现listview分页载入数据,今天最终实现了,哈哈!感觉挺好的,今天又写了个demo给大家分享下. 首先说下listview的优化方案,这也是面试中常考的题目.优化方 ...

  8. Android之ListView优化

    关于ListView几个方面的优化: ListView的大小设定固定值; 复用convertView, 使用ViewHolder提高在容器中查找组件的效率; 使用分页加载; 快速滚动时, item不显 ...

  9. Android关于listView的BaseAdapter以及getView的三级优化

    1.4个重写方法的含义 自定义Adapter继承自BaseAdapter(通用适配器)   getCount(); getItem(); getItemId(); getViewTypaCount() ...

随机推荐

  1. c# base和this关键字总结

    base:用于在派生类中实现对基类公有或者受保护成员的访问,但是只局限在构造函数.实例方法和实例属性访问器中.MSDN中小结的具体功能包括:    (1)调用基类上已被其他方法重写的方法.     ( ...

  2. Stl源码剖析 第三章 iterator摘要

    1. Stl的设计思想是: 将数据容器和算法分开,彼此独立设计,最后再以一贴胶合剂将它们撮合在一起,这个胶合剂就是迭代器. 2. 从3.2节迭代器的实现可知,如果要设计一个与容器分离实现的迭代器,会暴 ...

  3. jquery了解

    jQuery 库 - 特性 jQuery 是一个 JavaScript 库. jQuery 是一个 JavaScript 函数库. jQuery 库包含以下特性: HTML 元素选取 HTML 元素操 ...

  4. Oracle存储过程(转)

    Oracle存储过程基本语法 存储过程 1 CREATE OR REPLACE PROCEDURE 存储过程名 2 IS 3 BEGIN 4 NULL; 5 END; 行1: CREATE OR RE ...

  5. mysql复制一列到另一列

    mysql复制一列到另一列   UPDATE 表名 SET B列名=A列名 需求:把一个表某个字段内容复制到另一张表的某个字段. 实现sql语句1: 复制代码代码如下: UPDATE file_man ...

  6. Image放大缩小在放进Imageview

    // 拿到要缩小放大的Bitmap obitmap = BitmapFactory.decodeResource(this.getResources(),R.drawable.ic_launcher) ...

  7. IntelliJ IDEA中Maven项目的默认JDK版本

    在IntelliJ IDEA 15中使用Maven时,IDEA将默认的编译版本.源码版本设置为jdk5.编译项目的时候出现警告:"Warning:Java: 源值1.5已过时, 将在未来所有 ...

  8. js计时器

    js代码: <script language="javascript"> ,h=,s=,ss=; function second(){ )==){s+=;ss=;} & ...

  9. BurpSuite 抓手机包

    Windows and Phone 处于同一无线环境下 Windows   Phone   Burp Suite设置

  10. Github windows客户端简单使用教程

    1. 首先到官网下载Github客户端,官网地址:https://desktop.github.com/ 2. 点击上图红框的按钮开始下载客户端. 3. 双击下载好的客户端,开始安装. 双击之后出现一 ...