2014-10-28 23 views
14
<android.support.v7.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android" 
            android:orientation="horizontal" 
            android:layout_width="match_parent" 
            android:stateListAnimator="@anim/anim" 
            android:layout_margin="5dp" 
            android:clickable="true" 
            android:layout_height="wrap_content"> 
    <TextView 
       android:layout_width="match_parent" 
       android:layout_height="match_parent" 
       android:id="@+id/textview" 
       android:minHeight="?android:listPreferredItemHeight" 
       android:gravity="center_vertical"> 

    </TextView> 
</android.support.v7.widget.CardView> 

Tôi đang sử dụng CardView để hiển thị hàng văn bản. Làm cách nào để vuốt để xóa các hàng đó - đó là bản xem trước thẻ? Ngoài ra, làm thế nào để thiết lập một onItemClickListener cho mỗi hàng? Một lần nữa, tôi đang sử dụng cardview để hiển thị mỗi hàng.Cách vuốt để xóa Thẻ (sử dụng CardView của appcompat v7)

Trả lời

12

Tôi muốn làm điều gì đó tương tự, vì vậy tôi đã điều chỉnh romannurik's Android-SwipeToDismiss để thực hiện chính xác những gì chúng tôi muốn.

The code is on github với một ứng dụng mẫu làm việc, và bao gồm:

  • Một lớp con của RecyclerView.OnItemTouchListener mà nghe chạm vào các sự kiện và phát hiện khi một mục đã được swiped, hiệu ứng động nó cho phù hợp.
  • A SwipeListener được gọi để biết liệu một mục có thể bị loại bỏ và được gọi lại khi các mục bị loại bỏ.

Để sử dụng nó, hãy làm theo các hướng dẫn trên github, hoặc chỉ cần sao chép các lớp SwipeableRecyclerViewTouchListener để dự án của bạn và sử dụng nó như thế này:

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    mItems = new ArrayList<>(30); 
    for (int i = 0; i < 30; i++) { 
     mItems.add(String.format("Card number %2d", i)); 
    } 

    mAdapter = new CardViewAdapter(mItems); 

    mRecyclerView = (RecyclerView) findViewById(R.id.recycler_view); 

    mRecyclerView.setLayoutManager(new LinearLayoutManager(this)); 
    mRecyclerView.setAdapter(mAdapter); 

    SwipeableRecyclerViewTouchListener swipeTouchListener = 
      new SwipeableRecyclerViewTouchListener(mRecyclerView, 
        new SwipeableRecyclerViewTouchListener.SwipeListener() { 
         @Override 
         public boolean canSwipe(int position) { 
          return true; 
         } 

         @Override 
         public void onDismissedBySwipeLeft(RecyclerView recyclerView, int[] reverseSortedPositions) { 
          for (int position : reverseSortedPositions) { 
           mItems.remove(position); 
           mAdapter.notifyItemRemoved(position); 
          } 
          mAdapter.notifyDataSetChanged(); 
         } 

         @Override 
         public void onDismissedBySwipeRight(RecyclerView recyclerView, int[] reverseSortedPositions) { 
          for (int position : reverseSortedPositions) { 
           mItems.remove(position); 
           mAdapter.notifyItemRemoved(position); 
          } 
          mAdapter.notifyDataSetChanged(); 
         } 
        }); 

    mRecyclerView.addOnItemTouchListener(swipeTouchListener); 
} 
1

Đây là ví dụ Vuốt để loại bỏ nổi tiếng từ Roman Nurik.

https://github.com/romannurik/Android-SwipeToDismiss

Nó bao gồm bác bỏ các mục trong một danh sách và sa thải riêng biệt View s. Nó sẽ hoạt động trên bất kỳ View nào bao gồm CardView.

SwipeDismissListViewTouchListener là để sử dụng trong một ListView để vuốt các mục. SwipeDismissTouchListener là dành cho bất kỳ View nào để loại bỏ toàn bộ View hoàn toàn.

Các vấn đề liên quan