Android-滑动recyclerview项后显示按钮
我创建了Android-滑动recyclerview项后显示按钮,android,android-recyclerview,Android,Android Recyclerview,我创建了RecyclerView,其中包含cardwiew,以显示数据。我想实现iOS风格的滑动列表元素来显示操作按钮。 我的方法应允许我在向左滑动RecyclerView项目后显示图标: public void initializeListeners() { ItemTouchHelper.SimpleCallback simpleItemTouchCallback = new ItemTouchHelper.SimpleCallback(0, ItemTouchHelper.
RecyclerView
,其中包含cardwiew
,以显示数据。我想实现iOS
风格的滑动列表元素来显示操作按钮。
我的方法应允许我在向左滑动RecyclerView
项目后显示图标:
public void initializeListeners() {
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 direction) {
int position = viewHolder.getAdapterPosition();
if (direction == ItemTouchHelper.LEFT) {
Toast.makeText(getView().getContext(),"LEFT",Toast.LENGTH_LONG).show();
}
}
@Override
public void onChildDraw(Canvas c, RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder, float dX, float dY, int actionState, boolean isCurrentlyActive) {
Bitmap icon;
if (actionState == ItemTouchHelper.ACTION_STATE_SWIPE) {
View itemView = viewHolder.itemView;
float height = (float) itemView.getBottom() - (float) itemView.getTop();
float width = height / 3;
if (dX < 0) {
p.setColor(Color.parseColor("#D32F2F"));
RectF background = new RectF((float) itemView.getRight() + dX/4, (float) itemView.getTop(), (float) itemView.getRight(), (float) itemView.getBottom());
c.drawRect(background, p);
icon = BitmapFactory.decodeResource(getResources(), R.drawable.ic_delete_black_24dp);
RectF icon_dest = new RectF((float) itemView.getRight() - 2 * width, (float) itemView.getTop() + width, (float) itemView.getRight() - width, (float) itemView.getBottom() - width);
c.drawBitmap(icon, null, icon_dest, p);
}
}
super.onChildDraw(c, recyclerView, viewHolder, dX/4, dY, actionState, isCurrentlyActive);
}
};
ItemTouchHelper itemTouchHelper = new ItemTouchHelper(simpleItemTouchCallback);
itemTouchHelper.attachToRecyclerView(binding.myPlans);
}
public void initializeListeners(){
ItemTouchHelper.SimpleCallback simpleItemTouchCallback=新建ItemTouchHelper.SimpleCallback(0,ItemTouchHelper.LEFT | ItemTouchHelper.RIGHT){
@凌驾
公共布尔onMove(RecyclerView RecyclerView、RecyclerView.ViewHolder ViewHolder、RecyclerView.ViewHolder目标){
返回false;
}
@凌驾
公共空间(RecyclerView.ViewHolder ViewHolder,int方向){
int position=viewHolder.getAdapterPosition();
if(direction==ItemTouchHelper.LEFT){
Toast.makeText(getView().getContext(),“左”,Toast.LENGTH_LONG.show();
}
}
@凌驾
public void onChildraw(画布c、RecyclerView RecyclerView、RecyclerView.ViewHolder ViewHolder、float dX、float dY、int actionState、boolean isCurrentlyActive){
位图图标;
如果(actionState==ItemTouchHelper.ACTION\u STATE\u SWIPE){
View itemView=viewHolder.itemView;
浮动高度=(float)itemView.getBottom()-(float)itemView.getTop();
浮动宽度=高度/3;
if(dX<0){
p、 setColor(Color.parseColor(#D32F2F”);
RectF background=new RectF((float)itemView.getRight()+dX/4,(float)itemView.getTop(),(float)itemView.getRight(),(float)itemView.getBottom());
c、 drawRect(背景,p);
icon=BitmapFactory.decodeResource(getResources(),R.drawable.ic_delete_black_24dp);
RectF icon_dest=new RectF((float)itemView.getRight()-2*width,(float)itemView.getTop()+width,(float)itemView.getRight()-width,(float)itemView.getBottom()-width);
c、 drawBitmap(图标,null,图标,p);
}
}
super.onchildraw(c、recyclerView、viewHolder、dX/4、dY、actionState、isCurrentlyActive);
}
};
ItemTouchHelper ItemTouchHelper=新的ItemTouchHelper(simpleItemTouchCallback);
itemTouchHelper.attachToRecyclerView(binding.myPlans);
}
其影响是:
我想使此图标可单击
,以便使用recyclererview
中单击的对象的id
发送HTTP
请求(在alertview确认后)
可能吗?我试图替换<代码>位图 <代码> IGEPutux没有成功的 如果你考虑列表中的可搜索项,则Android和iOS的逻辑有点不同。在Android中,你不需要点击确认删除。用户刷卡该物品的事实足以证明这一点 这就是为什么
ItemTouchHelper
不会为您提供附加OnClickListener
的方法
你有两个选择:
绘制的背景是画布,画布不允许执行单击 我找到了一种方法,可以在RecyclerView.OnItemTouchListener的onInterceptTouchEvent中模拟单击垃圾箱视图 首先,在您的
onBindViewHolder
中,您必须将视图的标记设置为它的viewHolder:viewHolder.itemView.setTag(viewHolder)
然后:
@Override
public void onInterceptTouchEvent (RecyclerView rv, MotionEvent e) {
View viewSwipedRight = rv.findChildViewUnder(e.getX() - rv.getWidth(), e.getY());
if (viewSwipedRight != null && e.getAction() == MotionEvent.ACTION_DOWN) {
ViewHolder viewHolder = (ViewHolder) viewSwipedRight.getTag();
if (e.getX() >= viewHolder.trashIcon.getX()) {
// Your icon is clicked !
}
}
}
说明:
向左滑动时,视图仍在此处,但不在屏幕上,因为它已在recyclerview的左侧移动,因此view viewSwipedRight=rv.findChildViewUnder(e.getX()-rv.getWidth(),e.getY())
将在recyclerView on屏幕左侧的Y单击处找到视图(多亏了e.getX()-rv.getWidth()
)
然后使用e.getX()>=viewHolder.trashIcon.getX()
(您的trashIcon必须位于您的viewHolder中)查看事件X是否与垃圾箱图标在其自身视图中的X匹配
如果这两个条件都匹配,那么您已经单击了垃圾箱图标。我写了一篇博客文章,描述了实现这种功能所需的步骤
- 将以下类添加到项目中:
- 调整RecyclerView视图支架的布局代码,并添加SwipereVallayout组件作为RecyclerView项目顶层和底层的容器。有关如何设置的示例,请参见:
- 确保底层是SwipereVallayout容器中的第一个布局组件
- 确保为底层使用“包裹内容”或预定义的宽度。我使用“match_parent”进行了测试,顶层做了一个很好的魔术,然后消失了
- 如果要在底层添加可单击功能,请确保顶层具有android:clickable=“true”,否则单击顶层时仍会触发底层组件的单击
- 可选:可以定义要从中拖动的边。默认情况下,它将从左侧拖动,在示例项目中,我将其定义为从右侧拖动。指定SwipereVallayout组件的属性时,请使用
指定它app:dragFromEdge=“{edge to drag from}”
如果您有兴趣查看完整的博客文章,请在此处查看:一个更简单的方法是操作UI,在顶部添加一个imageview,然后根据您的喜好向右或向左移动。请在cla中解决此关键问题