2014-10-28 54 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> 

我使用CardView顯示一行文本。如何刷卡刪除這些行 - 這是cardviews?另外,如何爲每一行設置一個onItemClickListener?再次,我使用cardview來顯示每一行。如何刷卡刪除(使用appcompat v7的CardView)

回答

12

我想做類似的事情,所以我改編romannurik's Android-SwipeToDismiss做我們想要的。

The code is on github與工作示例應用程序,和由以下組成:

  • RecyclerView.OnItemTouchListener子類偵聽觸摸事件並且當項目被偷走檢測,相應地設置其動畫。
  • A SwipeListener這是調用,以便知道是否可以消除一個項目,並在項目被解僱時再次調用。

要使用它,請在GitHub上的說明,或者只是類SwipeableRecyclerViewTouchListener複製到您的項目,這樣使用它:

@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

這裏是着名的從羅馬努裏克滑過的例子。

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

它包括解僱列表中的項目,解聘獨立View秒。它應該可以在任何View上工作,包括CardView

SwipeDismissListViewTouchListener用於在ListView中刷卡項目。 SwipeDismissTouchListener用於任何View完全解僱整個View