<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显示每一行。
答案 0 :(得分:12)
我想做类似的事情,所以我改编romannurik's Android-SwipeToDismiss来做我们想要的事情。
带有工作示例应用程序的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 :(得分:1)
以下是Roman Nurik着名的Swipe to Dismiss示例。
https://github.com/romannurik/Android-SwipeToDismiss
它包括解雇列表中的项目并解除单独的View
。它应该适用于任何View
,包括CardView
。
SwipeDismissListViewTouchListener
用于在ListView
中使用以滑动项目。
SwipeDismissTouchListener
适用于任何View
完全取消整个View
。