android关于listview更新数据后如何保持位置不变

Grooter 2018-02-11 05:08:57
用setSelection只能定位前十条,因为一更新数据最先显示前十条,而后面的在滑动过程中重绘,请问如何保证在任意行数下更新数据位置能不变。由于分数不足,希望大家谅解,请求保证帮帮忙。谢谢了
...全文
1989 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
怀君 2018-02-12
  • 打赏
  • 举报
回复
如果你用的是Recycleview的话,取到当前位置的position,刷新当前item。就可以了。
  • 打赏
  • 举报
回复 1
记录: 
mList.setOnScrollListener(new AbsListView.OnScrollListener() {
            @Override
            public void onScrollStateChanged(AbsListView view, int scrollState) {
               
                if (scrollState == AbsListView.OnScrollListener.SCROLL_STATE_IDLE) {
                    mListFocus = mList.getFirstVisiblePosition();
                    View item = mList.getChildAt(0);
                    firstVisiblePositionTop = (item == null) ? 0 : item.getTop();
                }

            }

            @Override
            public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {

            }
        });


设置:
mList.setSelectionFromTop(mListFocus, firstVisiblePositionTop);
  • 打赏
  • 举报
回复
listview.post(new Runnable() { @Override public void run() { mAdapter.addData(messages);//addData()内部调用notifyDataSetChanged()更新数据 listview.smoothScrollToPosition(yourPosition); } }); 可以吗?
有时候,使用ListView并不能满足应用程序所需要的功能。有些应用程序需要多组ListView,这时候我们就要使用一种新的控件ExpandableListView——可以扩展的ListView。它的作用就是将ListView进行分组。就好像我们使用QQ的时候,有“我的好友”,“陌生人”,“黑名单”一样,点击一下会扩展开,再点击一下又会收缩回去。 ExpandableListView是一个垂直滚动显示两级列表项的视图,与ListView不同的是,它可以有两层:每一层都能够被独立的展开并显示其子项。这些子项来自于与该视图关联的ExpandableListAdapter。 每一个可以扩展的列表项的旁边都有一个指示符(箭头)用来说明该列表项目前的状态(这些状态一般是已经扩展开的列表项,还没有扩展开的列表项,子列表项和最后一个子列表项)。可以使用方法:setChildIndicator(Drawable),setGroupIndicator(Drawable)(或者相应的XML文件的属性) 去设置这些指示符的样式。当然也可以使用默认的指示符。布android.R.layout.simple_expandable_list_item_1,android.R.layout.simple_expandable_list_item_2 和ListView一样,ExpandableListView也是一个需要Adapter作为桥梁来取得数据的控件。一般适用于ExpandableListView的Adapter都要继承BaseExpandableListAdapter这个类,并且必须重载getGroupView和getChildView这两个最为重要的方法。 BaseExpandableListAdapter的主要重载方法如下: public abstract ObjectgetChild (int groupPosition, int childPosition) 取得与指定分组、指定子项目关联的数据. 参数 groupPosition 包含子视图的分组的位置. childPosition 指定的分组中的子视图的位置. 返回 与子视图关联的数据. public abstract long getChildId (int groupPosition, intchildPosition) 取得给定分组中给定子视图的ID. 该组ID必须在组中是唯一的.必须不同于其他所有ID(分组及子项目的ID). 参数 groupPosition 包含子视图的分组的位置. childPosition 要取得ID的指定的分组中的子视图的位置. 返回 与子视图关联的ID. public abstract View getChildView (int groupPosition, intchildPosition, boolean isLastChild, View convertView, ViewGroup parent) 取得显示给定分组给定子位置数据用的视图. 参数 groupPosition 包含要取得子视图的分组位置. childPosition 分组中子视图(要返回的视图)的位置. isLastChild 该视图是否为组中的最后一个视图. convertView 如果可能,重用旧的视图对象.使用前你应该保证视图对象为非空,并且是否是合适的类型.如果该对象不能转换为可以正确显示数据的视图,该方法就创建新视图.不保证使用先前由 getChildView(int, int,boolean, View, ViewGroup)创建的视图. parent 该视图最终从属的父视图. 返回 指定位置相应的子视图. public abstract int getChildrenCount (int groupPosition) 取得指定分组的子元素数. 参数 groupPosition 要取得子元素个数的分组位置. 返回 指定分组的子元素个数. public abstract long getCombinedChildId (long groupId, long childId) 取得一览中可以唯一识别子条目的 ID(包括分组ID和子条目ID).可扩展列表要求每个条目 (分组条目和子条目)具有一个可以唯一识别列表中子条目和分组条目的ID. 该方法根据给定子条目ID和分组条目ID返回唯一识别ID.另外,如果 hasStableIds() 为真,该函数返回的ID必须是固定不变的. 参数 groupId 包含子条目ID的分组条目ID. childId 子条目的ID. 返回 可以在所有分组条目和子条目中唯一识别该子条目的ID(可能是固定不变

80,351

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧