如何使用支持库滑动删除android中的cardview

时间:2014-10-17 10:22:38

标签: android android-support-library

您好我正在使用支持库android.support.v7.widget.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>

如何实现滑动删除功能呢?

提前致谢。

4 个答案:

答案 0 :(得分:30)

我改编romannurik's Android-SwipeToDismiss来做到这一点。

带有woking示例应用程序的

The code is on github,包含:

  • RecyclerView.OnItemTouchListener的子类,用于侦听触摸事件并检测项目何时被刷过,并相应地设置动画。
  • 调用的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 :(得分:8)

在android support v7 API中有一种刷新删除手势的新方法。 类名称为ItemTouchHelper

先生。 Paul Burke写了一个关于如何实现这个功能的惊人例子。 见link

答案 2 :(得分:0)

由于这是第一个结果而添加。

我正在寻找类似的东西,并且遇到了一些问题,检查了前两个答案,但这是我发现最容易实现的答案。只需将其粘贴在活动中,然后将itemlist / adapater / recyclerview更改为您的名字即可。

ItemTouchHelper.SimpleCallback simpleItemTouchCallback = new 
ItemTouchHelper.SimpleCallback(0, ItemTouchHelper.LEFT | ItemTouchHelper.RIGHT) {

    @Override
    public boolean onMove(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder, RecyclerView.ViewHolder target) {
        return false;
    }

    @Override
    public void onSwiped(RecyclerView.ViewHolder viewHolder, int swipeDir) {

        ItemList.remove(viewHolder.getAdapterPosition());
        Adapter.notifyItemRemoved(viewHolder.getAdapterPosition());
    }

    @Override
    public void onMoved(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder, int fromPos, RecyclerView.ViewHolder target, int toPos, int x, int y) {
        super.onMoved(recyclerView, viewHolder, fromPos, target, toPos, x, y);
    }
};

ItemTouchHelper itemTouchHelper = new ItemTouchHelper(simpleItemTouchCallback);
itemTouchHelper.attachToRecyclerView(RecyclerViewer);

在这里找到:codeproject

答案 3 :(得分:0)

https://github.com/journaldev/journaldev/tree/master/Android/AndroidRecyclerViewSwipeToDelete帮了您

RecyclerView.OnItemTouchListener的子类,它侦听触摸事件并检测何时刷卡某项,并对其进行动画处理。 一个SwipeListener,它是为了知道某个项目是否可以被撤消而调用的,并在撤消项目时再次调用它。