-1

我有一个包含 4 个元素的 recyclerview 列表,滑动将按顺序完成,每次按下撤消按钮时,滑动的视图如何返回到列表顶部?

我的适配器

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,但这仅适用于最后一个刷过的视图,我如何才能将之前的视图返回到列表中。

4

1 回答 1

0

正如我在上一个问题中所说,记下所有已删除的卡片,然后以完全相同的方式将它们添加回来。

您可以为此使用堆栈。堆栈保留每张已移除卡片的副本,您可以通过调用将它们按添加到堆栈的顺序恢复pop

您当然需要进行一些错误检查以确保堆栈不为空。

例如

private Stack<Card> removedItems = new Stack<Card>();


private void Remove() {

    removedItems.push(cardToRemove);

}

private void Restore() {

    Card cardToRestore = removedItems.pop()

}
于 2017-03-09T13:18:29.627 回答