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
,我得到了我想要的动画。
我正在 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
,我得到了我想要的动画。