热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Android自定义RecycleView左滑上下分层示例代码

为了满足项目需求,需要在多个场景中实现左滑删除功能,并且后续可能在列表项中增加其他功能。虽然网络上有很多左滑删除的示例,但大多数封装不够完善。因此,我们尝试自己封装一个更加灵活和通用的解决方案。

在项目开发过程中,经常需要在多个界面实现左滑删除功能,并且未来可能会在列表项中增加更多功能。尽管网上有很多左滑删除的示例代码,但大多数封装不够彻底。因此,我们决定自己封装一个更加灵活和通用的解决方案。

该方案实现了上下两层互不干扰的效果,能够满足不同列表项的左滑需求。底部功能项(如删除、收藏等)可以动态添加。

8517f0246575e376e6f57c95604f7ba4.png

### 独立Adapter的操作方式

**思路**:通过反射创建ViewHolder,并确保数据操作通过回调函数传递给Activity处理。

public RCommonSlideAdapter(Object object, List datas, int layoutId, Class clazz, SlideItemHolder handle) {
    // 在onCreateViewHolder中通过反射创建holder
    Constructor constructor2 = mClazz.getConstructor(View.class);
    holder = constructor2.newInstance(v);
}

### 上下分层实现

**思路**:创建底部XML布局,然后通过addView将顶部视图插入,并由Activity处理。底部布局则在Adapter中处理。

Constructor cOnstructor= ViewHolderClass.SlideViewHolder.class.getConstructor(View.class);
holder = constructor.newInstance(v);
View cOntentView= View.inflate(parent.getContext(), mLayoutId, null);
ViewGroup.LayoutParams params = new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT);
((ViewHolderClass.SlideViewHolder) holder).mRlSlidContent.addView(contentView, params);
((ViewHolderClass.SlideViewHolder) holder).mRlSlidContent.getLayoutParams().width = getScreenWidth(parent.getContext());

### 独立功能项实现

**思路**:在XML布局中不断添加新的功能项,并在回调函数中对每个按钮进行处理,支持动态添加。


    

### ViewHolder类

public class ViewHolderClass {
    public static class SlideViewHolder extends RecyclerView.ViewHolder {
        @BindView(R.id.sliding_delete)
        public ImageView btn_Delete;
        @BindView(R.id.rlSlidContent)
        public RelativeLayout mRlSlidContent;
        @BindView(R.id.linSlideTitle)
        public LinearLayout mLinSlideTitle;
        @BindView(R.id.tvSlideTitle)
        public TextView mTvSlideTitle;

        public SlideViewHolder(View view) {
            super(view);
            ButterKnife.bind(this, view);
        }
    }

    public static class ShopCarViewHolder extends SlideViewHolder {
        @BindView(R.id.itemTv)
        public TextView mItemTv;

        public ShopCarViewHolder(View view) {
            super(view);
        }
    }
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也欢迎大家提出宝贵意见。


推荐阅读
  • 深入解析Spring启动过程
    本文详细介绍了Spring框架的启动流程,帮助开发者理解其内部机制。通过具体示例和代码片段,解释了Bean定义、工厂类、读取器以及条件评估等关键概念,使读者能够更全面地掌握Spring的初始化过程。 ... [详细]
  • 深入解析SpringMVC核心组件:DispatcherServlet的工作原理
    本文详细探讨了SpringMVC的核心组件——DispatcherServlet的运作机制,旨在帮助有一定Java和Spring基础的开发人员理解HTTP请求是如何被映射到Controller并执行的。文章将解答以下问题:1. HTTP请求如何映射到Controller;2. Controller是如何被执行的。 ... [详细]
  • 深入解析 Android IPC 中的 Messenger 机制
    本文详细介绍了 Android 中基于消息传递的进程间通信(IPC)机制——Messenger。通过实例和源码分析,帮助开发者更好地理解和使用这一高效的通信工具。 ... [详细]
  • 在 Android 开发中,通过 Intent 启动 Activity 或 Service 时,可以使用 putExtra 方法传递数据。接收方可以通过 getIntent().getExtras() 获取这些数据。本文将介绍如何使用 RoboGuice 框架简化这一过程,特别是 @InjectExtra 注解的使用。 ... [详细]
  • 本文介绍如何从字符串中移除大写、小写、特殊、数字和非数字字符,并提供了多种编程语言的实现示例。 ... [详细]
  • 深入解析动态代理模式:23种设计模式之三
    在设计模式中,动态代理模式是应用最为广泛的一种代理模式。它允许我们在运行时动态创建代理对象,并在调用方法时进行增强处理。本文将详细介绍动态代理的实现机制及其应用场景。 ... [详细]
  • 并发编程 12—— 任务取消与关闭 之 shutdownNow 的局限性
    Java并发编程实践目录并发编程01——ThreadLocal并发编程02——ConcurrentHashMap并发编程03——阻塞队列和生产者-消费者模式并发编程04——闭锁Co ... [详细]
  • This request pertains to exporting the hosted_zone_id attribute associated with the aws_rds_cluster resource in Terraform configurations. The absence of this attribute can lead to issues when integrating DNS records with Route 53. ... [详细]
  • 本文探讨了如何通过预处理器开关选择不同的类实现,并解决在特定情况下遇到的链接器错误。 ... [详细]
  • 我有一个SpringRestController,它处理API调用的版本1。继承在SpringRestControllerpackagerest.v1;RestCon ... [详细]
  • 在PHP后端开发中遇到一个难题:通过第三方类文件发送短信功能返回的JSON字符串无法解析。本文将探讨可能的原因并提供解决方案。 ... [详细]
  • 在高并发需求的C++项目中,我们最初选择了JsonCpp进行JSON解析和序列化。然而,在处理大数据量时,JsonCpp频繁抛出异常,尤其是在多线程环境下问题更为突出。通过分析发现,旧版本的JsonCpp存在多线程安全性和性能瓶颈。经过评估,我们最终选择了RapidJSON作为替代方案,并实现了显著的性能提升。 ... [详细]
  • 在尝试使用C# Windows Forms客户端通过SignalR连接到ASP.NET服务器时,遇到了内部服务器错误(500)。本文将详细探讨问题的原因及解决方案。 ... [详细]
  • 本文探讨了在Django项目中,如何在对象详情页面添加前后导航链接,以提升用户体验。文章详细描述了遇到的问题及解决方案。 ... [详细]
  • 在编译BSP包过程中,遇到了一个与 'gets' 函数相关的编译错误。该问题通常发生在较新的编译环境中,由于 'gets' 函数已被弃用并视为安全漏洞。本文将详细介绍如何通过修改源代码和配置文件来解决这一问题。 ... [详细]
author-avatar
手机用户2502863567
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有