我有一个包含4个元素的recyclerview列表,按顺序完成滑动视图,每次按下撤销按钮,刷新视图如何返回到列表顶部?
MyAdapter
public class RecyclerListAdapter extends RecyclerView.Adapter<RecyclerListAdapter.ItemViewHolder>
implements ItemTouchHelperAdapter {
private Card lastRemovedItem;
private int lastIndex = -1;
private final List<Card> mItems = new ArrayList<>();
Card car1 = new Card(R.drawable.card1, "first");
Card car2 = new Card(R.drawable.card2, "Second");
Card car3 = new Card(R.drawable.card3, "Third");
Card car4 = new Card(R.drawable.card4, "fourth");
public RecyclerListAdapter() {
mItems.addAll(Arrays.asList(car1, car2, car3, car4));
}
@Override
public ItemViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext()).inflate(card, parent, false);
ItemViewHolder itemViewHolder = new ItemViewHolder(view);
return itemViewHolder;
}
@Override
public void onBindViewHolder(ItemViewHolder holder, int position) {
Card card = mItems.get(position);
holder.textView.setText(card.getText());
holder.imageView.setImageResource(card.getImage());
}
@Override
public void onItemDismiss(int position) {
lastRemovedItem = mItems.get(position);
lastIndex = position;
mItems.remove(position);
notifyItemRemoved(position);
}
public void restoreLastItem() {
if (lastIndex == -1)
return;
mItems.add(lastIndex, lastRemovedItem);
notifyItemInserted(lastIndex);
lastRemovedItem = null;
lastIndex = -1;
}
@Override
public void onItemMove(int fromPosition, int toPosition) {
Card prev = mItems.remove(fromPosition);
mItems.add(toPosition > fromPosition ? toPosition - 1 : toPosition, prev);
notifyItemMoved(fromPosition, toPosition);
}
@Override
public int getItemCount() {
return mItems.size();
}
public static class ItemViewHolder extends RecyclerView.ViewHolder implements
ItemTouchHelperViewHolder {
public final TextView textView;
public final ImageView imageView;
public ItemViewHolder(View itemView) {
super(itemView);
textView = (TextView) itemView.findViewById(R.id.heading_text);
imageView = (ImageView) itemView.findViewById(R.id.image);
}
我尝试在onItemDismiss
方法上使用保存刷卡项并调用restoreLastItem
,但这只适用于最后一次刷卡视图,如何在列表之前获取视图。
答案 0 :(得分:0)
正如我在上一期提出的问题中所说,请注意所有已移除的卡片,然后以完全相同的方式将它们添加回来。
您可以使用堆栈。堆栈会保留每张已移除卡片的副本,您可以通过调用pop
按照它们添加到堆栈的顺序进行恢复。
您当然需要进行一些错误检查以确保堆栈不为空。
e.g
private Stack<Card> removedItems = new Stack<Card>();
private void Remove() {
removedItems.push(cardToRemove);
}
private void Restore() {
Card cardToRestore = removedItems.pop()
}