gpt4 book ai didi

android - 在 Cursor 支持的 RecyclerView 中隐藏(并重新显示)卡片

转载 作者:行者123 更新时间:2023-11-30 01:54:51 25 4
gpt4 key购买 nike

我有一个带有 CursorAdapter 的 RecyclerView,如下所示:https://gist.github.com/skyfishjy/443b7448f59be978bc59

我还有一个 ItemTouchHelper 附加到以这种方式实现的回收器(不要介意我的 Snackbar 修改):

private class TouchHelperCallbacks extends ItemTouchHelper.SimpleCallback {

public TouchHelperCallbacks(int dragDirs, int swipeDirs) {
super(dragDirs, swipeDirs);
}

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

@Override
public void onSwiped(final RecyclerView.ViewHolder viewHolder, int direction) {
Snackbar.make(recycler,
R.string.course_hidden,
Snackbar.LENGTH_LONG)
.setOnHideListener(new Snackbar.OnHideListener() {
@Override
public void onHide() {
//after Snackbar disappears, either because of a
//timeout or it is swiped away, remove item from db
}
})
.setAction(R.string.undo,
new View.OnClickListener() {
@Override
public void onClick(View v) {
//put card back into the recycler
}
})
.setActionTextColor(getActivity().getResources().getColor(R.color.color_accent))
.colorTheFuckingTextToWhite(getActivity())
.doStuffThatGoogleDidntFuckingDoProperly(getActivity(), null)
.show();
}
}

卡片被正确地刷掉了,但它下面的卡片并没有抬起来,刷过的卡片所在的地方只剩下空白区域。如果我在显示 Snackbar 时调用 notifyDatasetChanged(),它将重新出现在之前的位置。

我想避免访问数据库并使撤消尽可能轻量级。我可以在 Snackbar 仍在显示时实现一个额外的列或删除/插入行,但对于这样一个简单的任务来说似乎太重了(几秒钟内 3-4 个查询)。

理想情况下,我想访问当前在屏幕上的 ViewHolder 并将它们平移到所需的高度,如果用户选择撤消,则执行相同的操作,但方向相反,然后将卡片插回。

viewHolder.itemView.setVisibility(View.GONE) 似乎没有任何效果。

最佳答案

代码在https://github.com/brnunes/SwipeableRecyclerView做你想要的。

我是这样实现的:

private RecyclerView rvRoutes;
(...)

@Nullable
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
rvRoutes = (RecyclerView) view.findViewById(R.id.rvRoutes);
(...)

SwipeableRecyclerViewTouchListener swipeTouchListener =
new SwipeableRecyclerViewTouchListener(rvRoutes,
new SwipeableRecyclerViewTouchListener.SwipeListener() {
@Override
public boolean canSwipeLeft(int position) { return true; }

@Override
public boolean canSwipeRight(int position) { return true; }

@Override
public void onDismissedBySwipeLeft(RecyclerView recyclerView, int[] reverseSortedPositions) {
for (int position : reverseSortedPositions) {
Toast.makeText(MainActivity.this, mItems.get(position) + " swiped left", Toast.LENGTH_SHORT).show();


}
}

@Override
public void onDismissedBySwipeRight(RecyclerView recyclerView, int[] reverseSortedPositions) {
for (int position : reverseSortedPositions) {
Toast.makeText(MainActivity.this, mItems.get(position) + " swiped right", Toast.LENGTH_SHORT).show();

}
adapter.notifyDataSetChanged();
}
});

rvRoutes.addOnItemTouchListener(swipeTouchListener);

这就是全部,因为所有向上、向下移动项目等的动画都在 SwipeableRecyclerViewTouchListener 类中。

关于android - 在 Cursor 支持的 RecyclerView 中隐藏(并重新显示)卡片,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32406144/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com