RecyclerView 局部刷新发生的"诡异的事情"

**今天在做百度地图POI数据列表的时候,发生了一件诡异的不得了的事情。本来需求是查询出附近的POI数据并选择一者当做地址。
本来应该效果应该是这样的,如图:
**

RecyclerView 局部刷新发生的
pre.gif

看到这个效果不是很难,因为以前也试过通过RecyclerView 的notifyItemChanged来进行局部刷新,这是很容易做得到的事情,就下方代码为例:

   holder.itemView.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            if (layerView.getFoucusLayer() != null) {
                if (position == 0) {
                    ((PictureLayer) layerView.getFoucusLayer()).setFilter(null);
                } else {
                    EventBus.getDefault().post(filters.get(position - 1));
                }
                int copyPosition = selectPosition;
                selectPosition = position;
                FiltersAdapter.this.notifyItemChanged(copyPositio);
                FiltersAdapter.this.notifyItemChanged(selectPosition);
            }
        }
    });

我是用notifyItemChanged来更新需要修改的两项Item,然后做出来的效果,如图:

RecyclerView 局部刷新发生的
pre2.gif

但是,诡异的地方来了,当我往列表下面拉再进行点击的时候,列表却突然回滚到了第一行,我也没有测试是回滚还是整个刷新了,但是按理来说如果仅仅是刷新的话,当前scroll的位置应该也不会改变才对.但是却是真真的回到了第一行的位置,我也查了stackoverflow,也只找到了Nested RecyclerView scrolls to the first item on NotifyItemChanged这一篇解答,说是去除RecyclerView 动画,可是测试也没有效果.我猜测的可能是百度的MapView的问题,可能哎,明天再把东西单独出来测测,如果实在不行就用listview 做吧.

2016/08/09 上午
今天尝试了下使用listview进行测试,使用的 notifyDataSetChanged(),结果却出乎意料,毫无影响,因为item中没有图片,所以不考虑局部刷新,但是效果也还是不错的. 没想到RecyclerView还是有些问题的,晚上再单独使用RecyclerView进行测试.

你可能感兴趣的:(RecyclerView 局部刷新发生的"诡异的事情")