您好我正在使用支持库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>
如何实现滑动删除功能呢?
提前致谢。
答案 0 :(得分:30)
我改编romannurik's Android-SwipeToDismiss来做到这一点。
带有woking示例应用程序的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,它是为了知道某个项目是否可以被撤消而调用的,并在撤消项目时再次调用它。