2017-03-09 7 views
-1

i 4 개 요소가있는 recyclerview 목록이 있습니다. 스 와이프는 매번 실행 취소 버튼을 누를 때마다 스 와이프 된 뷰가 목록 상단으로 어떻게 돌아 가게되는지 순차적으로 완료됩니까?스 와이프 된보기를 recyclerview 목록에 순차적으로 첨부하는 방법은 무엇입니까?

MyAdapter

내가 onItemDismiss 방법에 슬쩍 항목을 저장하고 restoreLastItem를 호출하지만 이것은 단지 내가 목록에 그 전에 의견을 다시 얻을 수있는 방법 마지막 슬쩍보기 위해 작동하여 시도
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); 

     } 

.

답변

0

내가 마지막 질문에서 말했듯이, 제거 된 모든 카드를 기록한 다음 똑같은 방식으로 다시 추가하십시오.

스택을 사용할 수 있습니다. 스택에는 pop을 호출하여 스택에 추가 된 순서대로 복원 할 수있는 제거 된 각 카드의 복사본이 보관됩니다.

스택이 비어 있지 않은지 확인하려면 오류 검사를해야합니다.

예컨대

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


private void Remove() { 

    removedItems.push(cardToRemove); 

} 

private void Restore() { 

    Card cardToRestore = removedItems.pop() 

}