Android RecyclerView 将项目移动到视图的末尾

Android RecyclerView move item to end of View

我正在 Android RecyclerView 上显示项目,我希望能够 select 任何项目,然后将其放在列表的最后。我知道如何添加或删除项目,但我正在寻找实现此目的的最简洁方法。

如果可能的话,我也在寻找一个动画,显示这个项目在下降时飞过其他项目。

这是我的 adapter :

public class DiscoverViewAdapter extends RecyclerView.Adapter<DiscoverViewAdapter.ViewHolder> {

    private List<DiscoveredUser> _items;

    public DiscoverViewAdapter(List<DiscoveredUser> items) {
        this._items = items;
    }

    public static class ViewHolder extends RecyclerView.ViewHolder
    {
        TextView userName;
        TextView userAge;
        TextView userDescription;

        public ViewHolder(View itemView)
        {
            super(itemView);
            userName = (TextView) itemView.findViewById(R.id.user_name);
            userAge = (TextView) itemView.findViewById(R.id.user_age);
            userDescription = (TextView) itemView.findViewById(R.id.user_description);
        }
    }


    @Override
    public ViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) {
        View v = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.user_discover_row, viewGroup, false);
        return new ViewHolder(v);
    }

    @Override
    public void onBindViewHolder(ViewHolder viewHolder, int i) {
        DiscoveredUser user = _items.get(i);

        viewHolder.userName.setText(user.getUsername());
        viewHolder.userAge.setText(Integer.toString(user.getAge()));
        viewHolder.userDescription.setText(user.getDescription());
    }

    @Override
    public int getItemCount() {
        return _items.size();
    }

    public void remove(int position) {
        //_items.remove(position);
        //notifyItemRemoved(position);
    }

    public void add(DiscoveredUser user, int position) {
        _items.add(position, user);
        notifyItemInserted(position);
    }

    public void addMultiple(DiscoveredUser[] users){

        final int size = users.length;
        for (DiscoveredUser user : users) {
            _items.add(0, user);
        }
        notifyItemRangeInserted(0, size);
    }
}

将项目移至 List 的末尾并重新加载 Adapter

编辑: 要重新加载 Adapter 使用:

adapter.notifyDataSetChanged()

我不知道 notifyItemMoved() 函数存在。 我只是从我的 arraylist 中删除了该元素,然后在末尾将其添加回来。然后我打电话给notifyItemMoved()。使用 ItemAnimator,我得到了我想要的动画。