20191111 - 问题记录:recycler view点击checkbox完成条目,之后item自动移动到底部(战斗着的光棍节)

一个recycler view,每个项目都有checkbox,点击checkbox之后这个条目业务上就是完成状态,这时需要把完成的条目都移动到底部,整个recycler view是先按是否完成排序,再按id排序,如图

20191111 - 问题记录:recycler view点击checkbox完成条目,之后item自动移动到底部(战斗着的光棍节)_第1张图片

目前就只知道通过对item list排序来解决:

1. 对item list排序

2. recycler view项目更改(notifyDataSetChanged)

准备开始

1. 排序:

                Log.v(TAG, "准备更新recycler view");
                Log.v(TAG, "准备对adapter中的列表进行排序");
                Collections.sort(mTaskList, new Comparator() {
                    @Override
                    public int compare(Task o1, Task o2) {
                        int firstFinish = o1.isTaskFinished()?1:0;
                        int secondFinish = o2.isTaskFinished()?1:0;
                        Log.v(TAG, "o1=" + firstFinish + ", o2=" + secondFinish);
                        int i = firstFinish - secondFinish;
                        if(0 == i) {
                            return (o2.getTaskId() - o1.getTaskId());
                        }
                        return i;
                    }
                });

遇到的问题:

报错:Cannot call this method while RecyclerView is computing a。。。

解决:

                //Handler handler = new Handler();
                final Runnable r = new Runnable() {
                    public void run() {
                        Log.v(TAG, "new run!");
                        notifyItemMoved(position, mTaskList.indexOf(task));
                    }
                };
                view.post(r);

继续遇到问题:

这个程序另外有完成之后item消失的选项,现在这样的设计,除非再次点击,否则finish时候item不会消失,继续解决:

                if(isChecked && (!isFinishedShown)) {
                    holder.linearLayout.setVisibility(View.GONE);
                }

 

你可能感兴趣的:(20191111 - 问题记录:recycler view点击checkbox完成条目,之后item自动移动到底部(战斗着的光棍节))