Git Product home page Git Product logo

supportdemos's People

Contributors

mcxtzhang avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

supportdemos's Issues

当使用StaggeredGridLayoutManager布局时,用diffutil刷新会导致布局错误?

如题,下面附上截图:
image

刷新后的布局错误:
image

代码中设置如下:


rv.setAdapter(adapter);
rv.setLayoutManager(new StaggeredGridLayoutManager(2, StaggeredGridLayoutManager.VERTICAL));
rv.setHasFixedSize(true);
rv.setItemAnimator(new DefaultItemAnimator());
rv.addItemDecoration(new RecyclerView.ItemDecoration() {

        @Override
        public void getItemOffsets(Rect outRect, View view, RecyclerView parent, RecyclerView.State state) {
            outRect.top = 10;
            StaggeredGridLayoutManager.LayoutParams manager = (StaggeredGridLayoutManager.LayoutParams) view.getLayoutParams();
            int span = manager.getSpanIndex();

            Log.e("spanIndex", manager.isViewInvalid() + "");

            if (span == 0) {
                outRect.right = 10;
            }

        }
    });

问题

你好,可以加个QQ吗,我测试发现一个问题希望能跟你讨论一下。545281293

写的很好,不过有个问题想请教一下

比如我使用的是 List<Object>

Object 可能是 BeanABeanBBeanC 等等

那我在 areItemsTheSame(int oldItemPosition, int newItemPosition)areContentsTheSame(int oldItemPosition, int newItemPosition) 这两个方法中该如何判断呢?

手动点赞

你好,从微信公众号上看到,特地下载了你的Demo,发现却是很不错,不知是否能封装下,适配各种list

Bug in you project

@OverRide
public boolean areContentsTheSame(int oldItemPosition, int newItemPosition) {
TestBean beanOld = mOldDatas.get(oldItemPosition);
TestBean beanNew = mNewDatas.get(newItemPosition);
if (!beanOld.getDesc().equals(beanNew.getDesc())) {
return false;//如果有内容不同,就返回false
}
if (beanOld.getPic() != beanNew.getPic()) {
return false;//如果有内容不同,就返回false
}
return true; //默认两个data内容是相同的
}

应该不相同才返回true吧,这样才会继续调用getChangePayload()方法啊,所以应该默认返回false才对吧。我自己写的demo是跟你相反的

出现几个不能理解的问题

1.第一个按钮打开的Activity 位移效果完全是为了实现动画而做的 没有实际意义.
2.如果只是单纯的在list的第一个位置增加一条数据 列表不会出现增加item的动画 并且也不显示到新增的Item,还需要手动往上滑.并且因为是局部刷新,item的posiiton还是和上一条的位置是重复.这不符合刷新数据的逻辑.一般的数据都会把新数据放到最前面是吧.

   mNewDatas = new ArrayList<>();
           // mNewDatas.add(new TestBean("赵子龙", "帅", R.drawable.pic6));//模拟新增数据
            for (TestBean bean : mDatas) {
                mNewDatas.add(bean.clone());//clone一遍旧数据 ,模拟刷新操作
            }
            mNewDatas.add(0,new TestBean("赵子龙", "帅", R.drawable.pic6));//模拟新增数据

条目删除问题

在外面删除没问题,但是在onBindViewHolder删除条目会导致条目错乱

数据移动后的下标乱序问题

不知道你这边有没有发现数据集里面的数据发生位移之后,dispatchUpdatesTo只会触发onMoved回调,而不会触发onChanged回调。这会导致Adapter里面的onBindViewHolder不会被回调,而在onBindViewHolder里面绑定的事件(如Item的点击事件),拿到的position都是oldData的Position,此时UI上的展示以及是依照新的数据集来展示了。 其实从源码上可以轻易的发现问题所在。DiffUtil的dispatchUpdatesTo方法,里面onInserted和onRemoved分别调用了adapter的notifyItemRangeInserted和notifyItemRangeRemoved方法,它们都会触发adapter的onBindViewHolder。但是onMoved方法是调用的adapter的notifyItemMoved方法,这个方法明显不会触发onBindViewHolder啊, 不知道这里是不是Google的bug~

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.