通用Adapter的尝试《第二篇》

从分割一切到跟踪一切:MASA如何用自监督与Adapter解锁通用目标跟踪 本文探讨了MASA模型如何通过自监督学习和轻量级Adapter技术实现通用目标跟踪,从分割一切到跟踪一切的技术跃迁。该模型利用SAM作为基础模型,通过几何变换和像素对应生成自监督信号,显著提升了多目标跟踪的跨域性能。CVPR2024的研究成果展示了其在无人机和监控场景中的卓越表现,为计算机视觉领域带来了新的突破。 阅读详情

经过昨天一天的尝试与上午的一些努力,通用的adapter终于是可以用了。没有继承RecycleView,直接写就可以

上午主要对上一篇文章中没有进行介绍的MultiItemCommonAdapter和MultiItemTypeSupport研究了一下,写一篇博客总结一下。



先看一下这两张图,这其中使用的就是ListView(先用ListView,recycle我还不会。。。。)通过对adapter中不同的ItemType进行判断而采用不同的的布局文件

今日头条的那种其实就是有三种布局,根据新闻中图片的个数,或者其他的什么属性来判断采用哪种布局就可以实现这样不同的item的效果。当然,这些看起来好像有些复杂,对于没有写过聊天的更有些难度,不过大神们都给咱们写好了。直接用就可以。

1.MultiItemTypeSupport(用于对不同布局进行设置的辅助类--个人这么理解的。。)

<span style="font-size:18px;">public interface MultiItemTypeSupport<T>
{
	int getLayoutId(int position, T t);

	int getViewTypeCount();

	int getItemViewType(int position, T t);
}</span>

可以看出来,只有三个抽象方法,除了第一个剩下那两个如果之前使用过不同布局的童鞋应该很熟悉,getViewTypeCount获得的是所需要的不同布局的个数。

getItemViewType返回的是T中区分不同布局的值,getLayoutId返回的是不同的布局ID。

2.MultiItemCommonAdapter(大神写好的用于不同布局的adapter,我们要使用只需要继承这个adapter就可以)

<span style="font-size:18px;">public abstract class MultiItemCommonAdapter<T> extends CommonAdapter<T>
{

    protected MultiItemTypeSupport<T> mMultiItemTypeSupport;

    public MultiItemCommonAdapter(Context context, List<T> datas,
                                  MultiItemTypeSupport<T> multiItemTypeSupport)
    {
    	//因为不确定使用哪个layout所以返回-1
        super(context, -1, datas);
        mMultiItemTypeSupport = multiItemTypeSupport;
        if (mMultiItemTypeSupport == null)
            throw new IllegalArgumentException("the mMultiItemTypeSupport can not be null.");
    }

    @Override
    public int getViewTypeCount()
    {
        if (mMultiItemTypeSupport != null)
            return mMultiItemTypeSupport.getViewTypeCount();
        return super.getViewTypeCount();
    }

    @Override
    public int getItemViewType(int position)
    {
        if (mMultiItemTypeSupport != null)
            return mMultiItemTypeSupport.getItemViewType(position,
                    mDatas.get(position));
        return super.getItemViewType(position);

    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent)
    {
        if (mMultiItemTypeSupport == null)
            return super.getView(position, convertView, parent);

        int layoutId = mMultiItemTypeSupport.getLayoutId(position,
                getItem(position));
        ViewHolder viewHolder = ViewHolder.get(mContext, convertView, parent,
                layoutId, position);
        convert(viewHolder, getItem(position));
        return viewHolder.getConvertView();
    }</span>

}

首先看一下构造方法,一个上下文,一个数据集这没有没有问题,第三个就是之前写的那个辅助类,用于设置布局类型的。

之后就是两个重写的方法,getItemViewType()和getViewTypeCount(),用于对adapter的布局类型进行设置,如果mMultiItemTypeSupport为空的话就使用父类中的设置。

最后是getView()方法 如果mMultiItemTypeSupport为空的话就直接使用conmmonadapter的getview,不为空的话,根据mMultiItemTypeSupport中的layoutid来决定使用哪个布局文件,创建对应的ViewHolder,convert方法直接写,因为也是抽象类,在new的时候回直接重写此方法。

3.应用,鸿洋大神写的demo,方便大家使用和理解一下,使用起来真是超爽的。

ChatAdapter

<span style="font-size:14px;">public class ChatAdapter extends MultiItemCommonAdapter<ChatMessage>
{
    public ChatAdapter(Context context, List<ChatMessage> datas)
    {
        super(context, datas, new MultiItemTypeSupport<ChatMessage>()
        {
            @Override
            public int getLayoutId(int position, ChatMessage msg)
            {
                if (msg.isComMeg())
                {
                    return R.layout.main_chat_from_msg;
                }
                return R.layout.main_chat_send_msg;
            }

            @Override
            public int getViewTypeCount()
            {
                return 2;
            }
            @Override
            public int getItemViewType(int postion, ChatMessage msg)
            {
                if (msg.isComMeg())
                {
                    return ChatMessage.RECIEVE_MSG;
                }
                return ChatMessage.SEND_MSG;
            }
        });
    }

    @Override
    public void convert(ViewHolder holder, ChatMessage chatMessage)
    {

        switch (holder.getLayoutId())
        {
            case R.layout.main_chat_from_msg:
                holder.setText(R.id.chat_from_content, chatMessage.getContent());
                holder.setText(R.id.chat_from_name, chatMessage.getName());
                holder.setImageResource(R.id.chat_from_icon, chatMessage.getIcon());
                break;
            case R.layout.main_chat_send_msg:
                holder.setText(R.id.chat_send_content, chatMessage.getContent());
                holder.setText(R.id.chat_send_name, chatMessage.getName());
                holder.setImageResource(R.id.chat_send_icon, chatMessage.getIcon());
                break;
        }
    }
</span>}

个人感觉在getview方法中可以直接赋值,如果两个布局文件中基本控件相同的话,并且所实现的功能也相同,那么可以采用相同的控件ID,不用Swith判断,直接使用viewholder赋值就可以,或者可以这样说,在不同的布局文件中如果有具有相同的功能的控件,就可以使用相同的id。直接赋值,不用对布局文件进行判断。

Activity

<span style="font-size:18px;">public class MultiItemListViewActivity extends AppCompatActivity
{

    private ListView mListView;

    @Override
    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        mListView = (ListView) findViewById(R.id.id_listview_list);
        mListView.setDivider(null);
        mListView.setAdapter(new ChatAdapter(this, ChatMessage.MOCK_DATAS));

    }
</span>
}

我是不是只复制一句话就可以?,就是这么简单。

4.总结

对于基本的listView,girdView的使用通用adapter基本没有问题,RecycleView的使用还差的远,不过有了这个通用的adapter之后,写代码只需要一行就可以搞定。确实实用 高效

下一篇估计会写关于view 的事件分发机制。recycelview估计还得等等。







Matlab 轴承信号仿真+分析 文章目录项目说明1、信号仿真1.1 仿真公式1.2 信号参数设置1.3 代码实现2、仿真信号分析2.1 小波变换2.2 快速谱峭度 项目说明 本文主要解决两个问题: 1、仿真包含周期性冲击信号、随机干扰冲击信号、调制干扰信号以及随机噪声四个成分的故障轴承信号; 2、使用小波变换以及快速谱峭度对该仿真信号进行分析。 1、信号仿真 1.1 仿真公式 这里的仿真信号公式主要参考了包文杰学者的硕士论文《加权谱峭度故障诊断方法研究与应用》,列举公式如下: 周期性冲击信号仿真 随机干扰冲击信号仿真 调制 阅读详情

相关推荐

2024最新实战:用1Panel面板+Docker快速部署Frps服务端(含Nginx配置模板)

本文详细介绍了2024年企业级内网穿透方案,通过1Panel面板和Docker技术快速部署Frps服务端,包含Nginx反向代理配置模板。从服务器选型、系统准备到安全加固,提供全栈实战指南,帮助企业和开发者高效实现内网穿透需求。

weixin_27966471的博客 419

为RecyclerView打造通用Adapter 让RecyclerView更加好用

转载请标明出处: http://blog.youkuaiyun.com/lmj623565791/article/details/47251585; 本文出自:【张鸿洋的博客】 一、概述 记得好久以前针对ListView类控件写过一篇打造万能的ListView GridView 适配器,如今RecyclerView异军突起,其Adapter的用法也与ListView类似,那么我们也可以...

dawuafang 991

智慧矿山无人机空地一体化解决方案

未来,随着技术的不断进步和应用场景的不断拓展,智慧矿山无人机空地一体化解决方案将在矿业领域发挥更加重要的作用,为矿山的可持续发展提供更加有力的保障。该系统能够实现矿山的全方位、全天候监测与管理,提升矿山生产效率,降低安全风险,并为矿山的可持续发展提供有力支持。智慧矿山无人机空地一体化解决方案是当前矿业领域技术创新的重要方向,旨在通过集成无人机技术、物联网、大数据、人工智能等先进技术,实现矿山的智能化、高效化和安全化运营。在矿山爆破、挖掘等危险作业中,无人机可进行远程监控和指挥,降低人员安全风险。

专注多旋翼、复合翼无人机技术研究,从事低空经济行业。 1109

支持多布局的CommonAdapter

支持多布局的CommonAdapter以前总是打算要写一些博客,一方面是为了记录自己在Android开发中的心得,另一方面也跟大家分享一下,但总是觉得水平不够,总是拖着,心想在等等,后来看了看任玉刚大神的博客android学习路线:如何成长为高级工程师,觉得大神说的很有道理,“时不时把自己的知识汇总下写一篇博客出来,这对自己是一个提高,对别人也是一个帮助。这个怎么说呢,当你写博客,你就会发现一个知识

qq_25652907的博客 4155

实测338MB/s!FPGA与CYUSB3014的Slave FIFO模式实战避坑(附完整固件与源码)

本文详细介绍了FPGA与CYUSB3014在Slave FIFO模式下实现338MB/s高速数据传输的实战经验。通过优化硬件设计、固件配置和GPIF II接口设置,解决了USB3.0双向通信中的关键性能瓶颈,并提供了完整的固件与源码参考。

weixin_30570101的博客 457

如何在 Ubuntu 24.04 或 22.04 上安装和使用 GDebi

本文介绍了在Ubuntu 24.04上安装和使用GDebi的方法。GDebi是DPKG的轻量级替代品,能够自动解析并安装.deb包的依赖项。文章详细说明了系统更新、安装GDebi的步骤,并演示了通过GUI和CLI两种方式安装.deb包的操作流程。此外,还提供了验证安装和卸载包的方法。GDebi虽然非必需,但为用户提供了处理依赖项的另一种选择,适合需要安装本地Debian包的用户。

山岚的运维笔记 1974

RecyclerView的多种布局MultiItemTypeAdapter

文章很详细,篇幅比较长,请耐心看完思路: (1).数据源List<T> 中每条item,即T 有可能对应不同的布局模式,这就是的Recyclerview中出现了多布局,在此,我们定义一个接口管理每条item的布局,如下:public interface ItemViewDelegate<T> { int getItemViewLayoutId(); boolean isForViewTy

qq_34736014的博客 4559

学习笔记9--智能驾驶的功能安全设计之功能安全设计

本系列博客包括6个专栏,分别为:《自动驾驶技术概览》、《自动驾驶汽车平台技术基础》、《自动驾驶汽车定位技术》、《自动驾驶汽车环境感知》、《自动驾驶汽车决策与控制》、《自动驾驶系统设计及应用》。此专栏是关于《自动驾驶系统设计及应用》书籍的笔记.

FUXI_Willard 1794

Android ListView通用适配器升级支持多种布局

之前研究过并且写过一个listview通用的适配器,但是那个适配器不适用于多布局的情况,于是博客对适配器进行升级 先放上一个效果图,不是很美光,这是布局设计的问题,这里不深究: 贴上实现的代码: public class MainActivity extends AppCompatActivity { private ListView lv = null; pri

小金子的专栏 2346

YF-S401水流量传感器在STM32上的精准计量实现

本文详细介绍了YF-S401水流量传感器与STM32微控制器的集成应用,实现精准水流计量。通过外部中断和外部时钟两种脉冲计数方案,结合硬件配置、软件滤波和校准技巧,确保高精度流量测量。适用于智能家居和工业自动化中的水控系统,提升系统稳定性和测量准确性。

rainy的博客 896

手把手教你玩转CPU微架构专栏--​​​​1.5 工具准备:用Gem5模拟器“看见”微架构(安装、基础仿真命令)​

本文介绍了如何使用Gem5模拟器进行微架构学习和实验。Gem5是一款支持多种指令集的开源微架构模拟器,可模拟CPU流水线、缓存等核心组件。文章详细说明了在Ubuntu和macOS上安装Gem5的步骤,包括依赖安装、源码编译和验证方法。通过一个简单的加法指令测试程序,演示了如何运行基础仿真并解读输出日志,包括指令执行流程和性能统计数据。此外,还提供了两个实战实验:修改L1缓存大小和观察分支预测失败,帮助读者理解微架构参数对性能的影响。最后指出Gem5是学习微架构的"显微镜",能直观观察指令

xiaoheshang_123的博客 140

Android 对 Adapter 的 ItemType 进行封装简化

前言之所以要把 ItemType 的封装单独拉出一篇文章,是因为前面两篇分别是针对 ListAdapter 和 RecyclerAdapter,而 ItemType 封装的思路则都是一样的,基本上没有区别可言。另外一方面,我也觉得一篇文章的篇幅还是应该有点限制,不然我自己看着都没耐心。首先我觉得应该感谢一下鸿扬大神,很大程度上我对 ItemType 的处理参考了他的 baseAdapter 项目,虽

neverwoods的博客 3322

【系统架构设计师】2026年上半年真题论文:论高并发系统的设计与实践

本文围绕高并发系统架构设计展开,重点论述了电商秒杀系统的实战经验。文章采用"痛点-解决方案-效果"的逻辑结构,从缓存设计、异步处理、限流降级、数据库优化等6个维度详细阐述了应对高并发的技术策略。其中,重点介绍了多级缓存体系、基于消息队列的异步处理机制和微服务拆分实践,并辅以实际案例说明如何解决超卖、缓存雪崩等典型问题。全文强调高并发设计需要系统性思维,通过空间换时间、异步换吞吐、横向换能力等原则,最终实现系统吞吐量从500TPS提升至20000TPS的性能突破。

数据知道的博客 1157

通用Adapter的尝试

通用adapter,学习自鸿洋大神的博客

一生中至少要有两次奋不顾身。一次为爱情,一次为梦想。 806

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

通用的adapter

http://www.eoeandroid.com/thread-326973-1-1.html 还没试,不知道到底能不能用,希望可以用 最讨厌写adapter的了

findsafety的专栏 491

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

尝试编写一个不需要记忆的工具(以RecyclerView的Adapter为例)

过去开发Android的时候,是一个非常常用的类,但是却用起来有些麻烦,于是就根据需要写了很多XXXAdapter之类的工具,也有很多开源可用的Adapter工具。如果只用一个,养成习惯后不成问题,但是如果比较多,就容易忘记或记错混淆。于是就有了一个想法:我能不能写一个不需要去记忆的工具,即便很长时间没用忘记了,也可以直接上手用。本文以为例,来分享我的思考和实现方式。

乐征skyline 812

Android中adapter详解

Android Adapter Adapter是用来帮助填充数据的中间桥梁,比如通过它将数据填充到ListView, GridView, Gallery.而android 提供了几种Adapter:ArrayAdapter, BaseAdapter, CursorAdapter, HeaderViewListAdapter, ListAdapter, ResourceCursorAdapte

白马笑西风的专栏 2268

Adapter报错:The content of the adapter has changed

Adapter报错:The content of the adapter has changed

Working harder, getting stronger! 1万+

【模型介绍】这个可以让你玩出花儿来的模型:IP-Adapter_ip-adapter模型

【1】模型介绍在IP-Adapter刚发布阶段,就分支持SD1.5和SDXL两个版本的预处理器和对应的模型,大家在调用预处理器和模型的时候要注意与基础模型都要匹配好。陆续有相关的模型推出,特别是针对脸部处理的IP-Adapter模型,这就为我们进行参考图的人脸进行更完整地契合提供了更多可能。到现阶段为止,尤其是SDXL版本的,有2个预处理器和对应的4个模型,在使用上注意预处理器与模型的匹配,带“plus”的预处理器,就需要调用同样带“plus”的模型来使用。

阿道夫的博客 2006

DataBInding封装Adapter

我们先来总结一下目前Android开发中通过RecyclerView列表的几种常见实现方式。 1.直接使用原生RecyclerView提供的API,自己实现RecyclerView的Adapter和ViewHolder。 2.使用网上比较火的三方库,类似一行代码实现上拉加载更多,下拉刷新,xxx,xxx的RecyclerViewAdapter;或者个人开发者基于此类,再度封装的BaseAdapter。 3.使用Databinding,写一个一劳永逸的Adapter,从此告别Adapter的多次实现。

你全家都是博客 2136

【转】Adapter应用总结

Adapter应用总结 首先来看一下Adapter的体系结构:     一个Adapter的对象扮演一个桥梁的角色。这个桥梁连接着一个AdapterView和它所包含的数据。Adapter提供了一个通到数据项的途径。Adapter还负责为在数据集里的每个数据生项生成一个View。它有一个重要的方法:public abstract View getView (int position...

zbryan的专栏 565

【论文阅读】FedWiper: Federated unlearning via universal adapter

实现了精确遗忘 (Exact Unlearning)与许多追求近似遗忘的方法不同,FedWiper 的目标是彻底移除被遗忘数据的影响,使其模型状态与从未见过该数据时训练的模型等价。这提供了目前理论上最强的隐私保证。显著提升了精确遗忘的效率相比于“黄金标准”的从头重训练 (RfS),FedWiper 通过“分而治之”(子模型)和 Uni-Adapter 机制,大大减少了遗忘操作所需的时间和计算资源。实验表明其速度可以有数倍的提升。降低了通信成本。

wzx_442011334的博客 1054

adapter刷新时需要在主线程之中记录

结论:adapter的notifychange需要在主线程之中,可以使用runonuithread方法切换线程   mpl$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views. 01-08 20:29:18.785 27036 272...

HAPP NEW JAVA 1082

CushyStudio高级功能探索:IP Adapter与ControlNet结合使用的终极教程

CushyStudio作为一款强大的AI生成艺术平台,提供了丰富的工具和功能帮助创作者实现各种创意。其中,IP Adapter和ControlNet是两个非常实用的高级功能,它们的结合使用能够让你的AI绘画作品更加精准和富有创意。本文将详细介绍如何在CushyStudio中结合使用IP Adapter和ControlNet,帮助你快速掌握这一高级技巧。 ## 什么是IP Adapter和Cont

gitblog_00379的博客 970

3行代码玩转大模型微调:LLaMA-Factory Adapter机制彻底解密

还在为大模型微调占用上百GB显存发愁?LLaMA-Factory的Adapter适配器机制让你用消费级显卡实现专业级微调效果。本文将通过原理拆解+实战案例,带你掌握LoRA/OFT等轻量级微调技术的核心实现,看完就能上手将模型效果提升30%。 ## Adapter机制解决的核心痛点 传统全量微调需要更新模型所有参数,以Llama3-70B为例,仅权重文件就达131GB,加上优化器状态等开销,实

gitblog_00572的博客 1317

Adapter应用总结

[size=small][size=x-small] 首先来看一下Adapter的体系结构: 一个Adapter的对象扮演一个桥梁的角色。这个桥梁连接着一个AdapterView和它所包含的数据。Adapter提供了一个通到数据项的途径。Adapter还负责为在数据集里的每个数据生项生成一个View。它有一个重要的方法:public abstract View getView (i...

小小程序猿 166

Kotlin结合DataBinding简单封装一个RecyclerView的Adapter

这是项目总结的第二篇,上一篇在这:模仿Google News的TabLayout 在 GeekNews 中我尝试使用 DataBinding 来简化代码,本来是使用 BRVAH 这个优秀的开源框架作为基础 RecyclerView 的 Adapter使用的,但是写的过程中发现在 Adapter 里每次要写一堆样板代码,想着既然是实验项目,就干脆自己封装一个好了。 本篇blog主要是记录一下...

weixin_34059951的博客 1117
上一篇: 通用Adapter的尝试
下一篇: 《开发艺术探索中》RevealLayout的一些解释
hbl_for_android
博客等级 码龄11年 30粉丝 20原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值