2014-10-17 60 views
13

您好我正在使用支持库android.support.v7.widget.CardView来实现我的android应用程序中的cardview功能。我想实现轻扫以删除它的功能。如何在Android中使用支持库刷卡删除cardview

<android.support.v7.widget.CardView 
    xmlns:card_view="http://schemas.android.com/apk/res-auto" 
    android:id="@+id/card_view" 
    android:layout_gravity="center" 
    android:layout_width="200dp" 
    android:layout_height="200dp" 
    card_view:cardCornerRadius="4dp"> 

    <TextView 
     android:id="@+id/info_text" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" /> 
</android.support.v7.widget.CardView> 

如何实现轻扫删除其中的功能?

在此先感谢。

+0

https://github.com/gabrielemariotti/cardslib,请检查此库。它使用了一个onSwipeDismissListener,它可能有帮助。 – AmaJayJB 2014-10-17 11:12:47

+0

@AmaJayJB true - 但这是minSDK 14 - 支持更低.. – ligi 2014-10-17 11:18:33

+0

@AmaJayJB我没有使用该库。我正在使用cardview概念,谷歌推出支持库 – 2014-10-17 13:18:49

回答

29

我改编了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); 
} 
+0

太棒了!像魅力一样工作,谢谢! – Luis 2015-01-11 08:22:21

+0

如何删除一个元素?看起来你没有参考你滑动的适配器/元素来移除它。 – russellhoff 2015-01-12 11:47:39

+0

解决!只需调用适配器并在for循环中删除所需的元素即可。 – russellhoff 2015-01-12 12:24:26

8

没有为刷卡一种新的方法在支持Android删除手势v7 API。 班级名称为ItemTouchHelper

Paul Burke先生写了一个关于如何实现此功能的惊人示例。 看到这个link

+0

验证了这一点。也许增加一些最小的示例代码来改进这个答案? – 2016-06-15 03:46:37