Android - 刷回Recyclerview项目后显示按钮

Mit*_*d1r 8 android android-recyclerview

我创建RecyclerView了包含CardView以显示数据的内容.我想实现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);

    }
Run Code Online (Sandbox Code Playgroud)

效果是: 在此输入图像描述

我想制作这个图标clickable,以便HTTP使用id点击的对象发送请求RecyclerView(在alertview确认之后)

可能吗?我试图替换BitmapImageButton没有成功

Bar*_*ski 6

如果您考虑列表中的可滑动项,则逻辑在Android和iOS上略有不同。在Android中,您无需单击即可确认删除。用户刷过项目的事实足以确认。

这就是为什么ItemTouchHelper不会给您附加方式的原因OnClickListener

你有两个选择:

  1. 您可以编写自己的自定义滑动管理系统(痛苦)。
  2. 同意使用Android的方式,并在滑动后要求用户确认。


Mar*_*van 6

我写了一篇博客文章,描述了实现这种功能所需的步骤。

  • 将以下类添加到您的项目中:SwipeRevealLayout.java
  • 调整 RecyclerView ViewHolder 的布局代码,并添加 SwipeRevealLayout 组件作为 RecyclerView Item 顶层和底层的容器。有关如何设置的示例:list_item_main.xml
  • 确保底层是 SwipeRevealLayout 容器中的第一个布局组件。
  • 确保为底层使用“wrap_content”或预定义的宽度。我使用“match_parent”进行了测试,顶层做了一个很好的魔术并消失了。
  • 如果您在底层添加可点击功能,请确保顶层有android:clickable=”true”其他点击,否则当您点击顶层时仍会触发底层组件。
  • 可选:您可以定义要从中拖动的边缘。默认情况下,它将从左侧拖动,在示例项目中,我将其定义为从右侧拖动。app:dragFromEdge=”{edge to drag from}"在为 SwipeRevealLayout 组件指定属性时指定它。

如果您有兴趣查看完整的博客文章,请在此处查看:https : //android.jlelse.eu/android-recyclerview-swipeable-items-46a3c763498d