ListView单条数据刷新分页

当在类似朋友圈点赞功能时,需要用到单条数据刷新。

作为小白的我,所以百度到了这么一段代码处理:(这里的代码出处我实在找不到了,望谅解)

//实现单个item刷新  
private void update(final Object data, final int position) {
    //得到你屏幕上第一个显示的item
    int firstVisiblePosition = listView.getFirstVisiblePosition();
    //得到你屏幕上最后一个显示的item
    int lastVisiblePosition = listView.getLastVisiblePosition();

    if (position >= firstVisiblePosition && position <= lastVisiblePosition) {
        //得到你点击的item的view
        View view = listView.getChildAt(position - firstVisiblePosition);
        if (view.getTag() instanceof ViewHolder) {
            //拿到view的Tag,强转成CommentAdapter的ViewHolder
            ViewHolder holder = (ViewHolder) view.getTag();
            // ..... 数据刷新处理
        }
    }

}
 

这里的position,即点击了ListView的position。

在点击后向服务器提交处理,返回成功后重新获取数据然后刷新适配器。但是这里我们需要做单条刷新,即我们要拿到对 应item的新数据去进行的数据去进行刷新,在没有分页的情况下,直接获取 list.get(positon)就能得到对应item的数据,但是怎么可能能得到所有的数据,必然存在分页的情况。

最开始我想到的是,在loadmore()的时候把pageNo传入到适配器,获取的时候按照pageNo去获取数据,得到返回list后怎么去

获取对应item的呢。

这时候就得判断点击的positon了。

如果以10条为一页。

点击第一条时,positon = 0 . pageNo = 1. data = list.get(0);

点击第二条时,position = 1. pageNo = 1. data = list.get(1);

.......

点击第十条时,position = 9. pageNo = 1.data = list.get(9);

这时都是第一页,list取跟position相同位置的数据即可。

点击第十一条时,position = 10,pageNo = 2 . data = list.get(0);

此时已为第二页,则我们应该获取第二页的第0条数据。

点击第十五条时,position = 14, pageNo = 2 . data = list.get(4);

同理,这里获取第二页的第4条数据。

.......

点击第二十一条时, position = 20,pageNo = 3. data = list.get(0).

此时pageNo已为第3页。我们应该获取第三页的第0条数据。

......

以此类推,当点击三十一条时,是第四页,postion = 30,应该获取第四页的第0条。

..

所以得出以下规律。

当pageNo = 1时。获取的数据就为position位置。

当PageNo > 1时。获取的数据为position%10。

这样就能在加载更多后的pageNo页的所有数据,然后根据postion得到我们需要得到的第几条数据。然后把该数据刷新到对应

的item即可。

.....

可是事实如此吗。

进行测试。

第一页测试正常。加载第二页。点击第二页的,也正常...... 加载第三页,点击第三页的,数据返回也正常。

可是,这时list在loadmore时数据是在往后不断增加,前面的数据依然还在,虽然我们加载到了第三页,可是前两页的数据我

们还是能看得见。

我们依然可以对前两页的可以去点赞。可是这时的pageNo是第三页,我们获取的也是第三页的数据。那么再根据上面的方法获

取到的并不是点击该页的数据,数据刷新当然出现了问题。

那么如果得到准备的pageNo,显示不能再根据加载更多时的pageNo去设置。

如何得到当前点击的位置的准确pageNo然后获取对应页数的所有数据呢?

显然还是要从position入手。所有的所有。这个position是绝对不会撒谎的。

我们再回过头看看这个规律。

点击第一条时,positon = 0 . pageNo = 1. data = list.get(0);

.......

点击第十条时,position = 9. pageNo = 1.data = list.get(9);

点击第十一条时,position = 10,pageNo = 2 . data = list.get(0);

.......

点击第二十一条时, position = 20,pageNo = 3. data = list.get(0);

......

以此类推,当点击三十一条时,是第四页,postion = 30,应该获取第四页的第0条。

..

这时会发现,

pageNo = position/10 + 1;

这里的10为分页条数。

那么我们把分页条数换成其他数试试。

 (当前点击数 = position + 1)

 当点击第1条时,0/9 + 1 = 1;

 当点击第2条时,1/9 + 1 = 1;

.....

当点击第9条时,8/9 + 1 = 1;(此时为第一页最后一条)

当点击第10条时,9/9 + 1 = 2;(此时为第二页第一条)

....

当点击第18条时,17/9 + 1 = 2;(此时为第二页最后一条)

当点击第19条时,18/9 + 1 = 3;(此时为第三页第一条)

.....

显然也成立。

即 pageNo = position/分页数量 + 1;

至此,单条数据刷新分页问题已解决。

 

(本人为Android新人,文中如果有错误各位大佬指出下,我也不知道这样是不是处理标题的合适方式,如果有更好的方法,

望各位大佬不宁赐教)

 

                    第一篇博客

                    by the one

                   2018-1-26

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值