Aay*_*edi 6 android android-recyclerview itemtouchhelper
首先,我整天都在努力,但无法完成任何事情.我有一个RecyclerView使用RecyclerView's 的适配器SortedList.我尝试TouchHelper使用回调类实现:
public class TimerListTouchHelperCallback extends ItemTouchHelper.SimpleCallback {
private OnItemChangeListener onItemChangeListener;
public TimerListTouchHelperCallback(OnItemChangeListener listener, int dragDirs, int swipeDirs) {
super(dragDirs, swipeDirs);
this.onItemChangeListener = listener;
}
@Override
public int getSwipeDirs(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder) {
TimerHolder holder = (TimerHolder) viewHolder;
int holderState = holder.getState();
if (holderState == TimerHolder.TIMER_PENDING_DELETE) return 0;
else return super.getSwipeDirs(recyclerView, viewHolder);
}
@Override
public boolean onMove(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder, RecyclerView.ViewHolder target) {
return false;
}
@Override
public void onSwiped(RecyclerView.ViewHolder viewHolder, int swipeDir) {
TimerHolder holder = (TimerHolder) viewHolder;
int position = holder.getAdapterPosition();
// ViewHolder's state is changed that should handle the layout change.
holder.setState(TimerHolder.TIMER_PENDING_DELETE);
if (onItemChangeListener != null) onItemChangeListener.onItemSwiped(position);
}
protected interface OnItemChangeListener{
void onItemSwiped(int position);
}
}
Run Code Online (Sandbox Code Playgroud)
这是TouchHelper的初始化
timerAdapter = new TimerAdapter(this, timerList);
timerListView.setAdapter(timerAdapter);
TimerListTouchHelperCallback touchHelperCallback = new TimerListTouchHelperCallback(
timerAdapter,
ItemTouchHelper.LEFT,
ItemTouchHelper.LEFT);
ItemTouchHelper swipeToDismissTouchHelper = new ItemTouchHelper(touchHelperCallback);
swipeToDismissTouchHelper.attachToRecyclerView(timerListView);
Run Code Online (Sandbox Code Playgroud)
我的适配器实现了接口 OnItemChangeListener
@Override
public void onItemSwiped(int position) {
notifyItemChanged(position);
removalPendingTimers.add(timerList.get(position));
}
Run Code Online (Sandbox Code Playgroud)
我ViewHolder读取状态,状态是TimerHolder.TIMER_PENDING_DELETE什么时候隐藏视图的其余部分并显示带有撤消按钮的界面.但是直到我滚动视图并再次向后滚动它才会发生这种情况.有什么建议我缺少什么?
链接
终于可以运行了。由于notifyItemChanged没有切割它(它应该有),我使用了notifyItemRemoved后面的notifyItemInserted.
只是有点滞后,但有效。
我创建了一个简单的 Android 应用程序示例来更好地理解这个问题。
它利用了notifyItemChanged(position);当用户向左或向右滑动项目以显示撤消视图时。当撤消时间到期时,它会调用notifyItemRemoved(position)将其从列表中删除。以 GIF 为例,不留任何空行。
https://github.com/DawidvanGraan/ExampleRecycleViewSwipeDismiss
| 归档时间: |
|
| 查看次数: |
4396 次 |
| 最近记录: |