2017-03-09 8 views
-1

i 4要素のrecyclerviewリストがあります。スワイプされたビューは、毎回毎回アンドゥボタンを押したときにスワップされたビューがどのようにリストの先頭に戻ってくるかを順番に処理しますか?スワイプドビューを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

あなたの最後の質問で言いましたが、削除されたカードはすべてメモしておいて、まったく同じように戻してください。

このためにスタックを使用できます。スタックには、削除された各カードのコピーが保持されます。これらのカードは、スタックに追加された順にリストアすることができます(pop)。

スタックが空でないことを確認するには、何らかのエラーチェックが必要です。

例えば

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


private void Remove() { 

    removedItems.push(cardToRemove); 

} 

private void Restore() { 

    Card cardToRestore = removedItems.pop() 

} 
関連する問題