如何滑动以删除卡(使用appcompat v7的CardView)

2022-09-04 03:10:47
<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显示一行文本。如何滑动以删除这些行 - 哪些行是卡片视图?另外,如何为每行设置一个onItemClickListener?同样,我使用 cardview 来显示每一行。


答案 1

我想做类似的事情,所以我改编了romannurik的Android-SwipeToDismiss来做我们想要的。

该代码位于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);
}

答案 2

这是来自Roman Nurik的着名的Swipe to Dismiss示例。

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

它包括消除列表中的项目和消除单独的项目。它应该适用于任何包含 .ViewViewCardView

SwipeDismissListViewTouchListener用于在滑动项目中使用。 是任何人都完全忽视整体。ListViewSwipeDismissTouchListenerViewView


推荐