通用Adapter的尝试

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


转载请标明出处:http://blog.youkuaiyun.com/lmj623565791/article/details/38902805 ,本文出自【张鸿洋的博客】

注:本文内容基本基于鸿洋大神的博客,地址在上面,可以自行阅读。

1.通用Adapter(针对ListView,GridView)

由于作者水平有限,参考大神的博客,自己试着写了写,目前运用在listview和gridview中,对于recycleView和Viewpager的兼容还是不行的,不过大神博客里上传到Git上的那个版本是支持recycleview的,至于viewpager,个人观点,应该可以整合到一起,就会变成一个全通用的Adapter了。之所以这么说是因为之前尝试过一次,公用一个adapter,实现baseadapter,继承pageradapter,所有需要重写的方法都重写,当时只能过做到简单的显示,后来就放在一边就没继续研究,之后有时间会尝试写一写。

2.代码

具体的内容大神的博客里已经将的很详细了,而且对于经常写adapter的人来说阅读起来并不费劲,我就把我自己写过的总体贴一下,有问题欢迎指出。

public class ViewHolder extends RecyclerView.ViewHolder{
private final SparseArray<View> mViews;
private View mConvertView;
private int mPosition;
private int mlayoutId;
private Context mContext;
private ViewHolder(Context context,View itemView,ViewGroup parent,int position){
	super(itemView);
	mContext=context;
	mConvertView=itemView;
	mPosition=position;
	mViews=new SparseArray<View>();
	mConvertView.setTag(this); 
}
//获得ViweHolder对象
public static ViewHolder get(Context context,View convertView,ViewGroup parent,int layoutID,int position){
	if(convertView==null){
		View itemView=LayoutInflater.from(context).inflate(layoutID, parent,false);
		ViewHolder viewHolder = new ViewHolder(context, itemView, parent, position);
		viewHolder.mlayoutId=layoutID;
		return viewHolder;
	}else{
		ViewHolder holder = (ViewHolder) convertView.getTag();
		holder.mPosition=position;
		return holder;
	}
}
public <T extends View> T getView(int viewId){
	View view=mViews.get(viewId);
	if(view==null){
		view=mConvertView.findViewById(viewId);
		mViews.put(viewId, view);
	}
	return (T)view;
}
public View getConvertView(){
	return mConvertView;
}
//设置各种辅助方法
public ViewHolder setText(int viewId,String text){
	TextView view=getView(viewId);
	view.setText(text);
	return this;
}
public ViewHolder setImageResource(int viewId,int drawableId){
	ImageView view=getView(viewId);
	view.setImageResource(drawableId);
	return this;
}
public ViewHolder setImageBitmap(int viewId,Bitmap bitmap){
	ImageView view=getView(viewId);
	view.setImageBitmap(bitmap);
	return this;
}
}
这次代码中基本没有注释,因为并不难,我写的是参照大神在git上的最新的支持recycleview的版本的,可能跟大神博客里的有些不一样,不过基本上原理是一样的。

关于写通用的adapter总结看来主要是针对这几方面:

1.继承basedapter,把一些常用的,基本没有改变的东西都先写好。主要的技巧就是用到了一个泛型,解决了list集合中不同对象的困扰。

2.ViewHolder的写法,大神的博客中也说得很详细了,利用一个SparseArray来保存view对象,SparseArray大家可以把它看做是一个Map,只不过key只能是integer,实际上那SparseArray底层的实现方式是双数组,跟我们平时遇到的都有点不一样,它是一个数组存放key,一个数组存放Value。贴一下源码。

<span style="font-size:18px;">public class SparseArray<E> implements Cloneable {
    private static final Object DELETED = new Object();
    private boolean mGarbage = false;

    private int[] mKeys;
    private Object[] mValues;
    private int mSize;

    /**
     * Creates a new SparseArray containing no mappings.
     */
    public SparseArray() {
        this(10);
    }

    /**
     * Creates a new SparseArray containing no mappings that will not
     * require any additional memory allocation to store the specified
     * number of mappings.
     */
    public SparseArray(int initialCapacity) {
        initialCapacity = ArrayUtils.idealIntArraySize(initialCapacity);

        mKeys = new int[initialCapacity];
        mValues = new Object[initialCapacity];
        mSize = 0;
    }</span>
可以看出来,是双数组结构,这样更便于查找,至于其他的增删改查方面的大家可以自行去看一下,个人感觉跟arraylist的实现差不多。

3.ViewHolder中对于各种控件属性的赋值方法,个人感觉能够想到这一点的人真是太聪明了,真不知道最开始是怎么想到的。在ViewHolder中封装了大部分常用控件的设置方法,这样真的就是把adapter精简到极致了,写一个adapter只需要一句话。

4.viewholder中对于监听器的设置,这是在大神发在git上的最新的holder中看到的,封装了三个常用的ontouch,onclick,onlongclick方法,可以直接调用。

5.在大神的文档中还有这样的两个东西MultiItemCommonAdapter和MultiItemTypeSupport,这个是用来处理不同itemType的时候使用的,最常见的就是聊天界面左右不同的item了。大家可以自行参考。

3.总结

记得第一次看大神这个文章的时候感觉,**,居然还可以这样?再一看是2014年的文章。顿时感觉自己要努力的地方还有很多啊!准备下一篇写一写关于RecycleView的文章,看到大家现在都用这个,准备研究研究,对于CommonAdapter,个人感觉能简化的就这么多了,也会尝试一下和pageradapter整合,不过现在都是viewpager结合fragment用,适配器也采用的是FragmentPageAdapter,这个整合难度有点大,不过个人认为是可行了,因为需要的方法是不同的,也不相互干扰,应该没问题。还是贴一下CommonAdapter的代码吧。自己也再看一遍。嗯嗯。

public  abstract class CommonAdapter<T> extends BaseAdapter{
protected LayoutInflater mInflater;
protected Context mContext;
protected List<T> mDatas;
protected int layoutID;
public CommonAdapter(Context context,List<T> mDatas,int layoutID){
	mInflater=LayoutInflater.from(context);
	this.mContext=context;
	this.mDatas=mDatas;
	this.layoutID=layoutID;
}
	@Override
	public int getCount() {
		return mDatas.size();
	}

	@Override
	public T getItem(int position) {
		// TODO Auto-generated method stub
		return mDatas.get(position);
	}

	@Override
	public long getItemId(int position) {
		// TODO Auto-generated method stub
		return position;
	}

	@Override
	public View getView(int position, View convertView, ViewGroup parent) {
		ViewHolder viewHolder=ViewHolder.get(mContext, convertView, parent, layoutID, position);
		convert(viewHolder,getItem(position));
		return viewHolder.getConvertView();
	}
	public abstract void convert(ViewHolder viewHolder, T item) ;
		
}

基本上就是常用的方法,不同的就是泛型和getView(),并不难。

文尾附上大神的项目,发表在Git上的,有兴趣的可以下下来看看,或者留邮箱。关于recycleView,百度recycleview jar 包,有很多。(刚试了下自己写的,炸了,一直在报NoClassDefFounfError 错误,不报错误就是一直在deBug,啊啊啊,要命了。)刚尝试下 去掉RecycleView的继承关系就可以了。看来recycleview使用还是有很多需要学的啊。

添加了多种Item类型的支持,源码地址:https://github.com/hongyangAndroid/base-adapter .


Aurora 8B/10B IP核介绍 —— Xilinx 技术文档Pg046 一、概述该IP核与用户接口之间支持AXI4-Stream协议,且基于ZYNQ SOC、A7、K7、V7以及UltraScale、UltraScale+系列FPGA的高速收发器(the high-speed serial transceivers)进行实现。多达 16 个连续绑定4 个连续绑定的 GTP 收发器framingstreaming以及全双工或单工加扰消扰CRC校验热插拔Aurora 8B/10B核心(图1-1)是一种可扩展的、轻量级的、用于高速串行通信的链路层协议; 阅读详情

相关推荐

PWM与光耦的完美联姻:低成本4-20mA转换方案揭秘

本文揭秘了PWM与光耦结合的低成本4-20mA转换方案,适用于工业自动化领域。通过PWM信号控制输出电流,光耦实现电气隔离,该方案成本低廉、电路简单且隔离可靠。文章详细介绍了两种经典电路实现方案,包括四光耦线性模式方案和PWM控制LM317方案,并提供了实战技巧与优化策略,帮助中小企业和电子DIY爱好者构建经济高效的4-20mA转换系统。

weixin_29229055的博客 536

张鸿洋 博客

张鸿洋 优快云认证专家,2014博客之星.鸿洋老师精通Java企业级开发,对基于Java的Web框架有一定的认知。而且还在csdn上撰写了”Android 精彩案例”一系列博文。 http://blog.youkuaiyun.com/lmj623565791   https://github.com/hongyangAndroid...

weixin_33763244的博客 2275

Altium Concord Pro 的应用范围,安装,和使用范围

Altium Concord Pro 的应用范围,安装,和使用范围。保证满足两者软件的最低安装要求。 Altium Concord Pro 是配合Digapcb,和MCAD,Altium 和相应机械设计软件的基础和交换桥梁

hanzhaos的博客 1121

NoCassDefFoundError原因分析

因为需要用到了外部jar中的Class,却在使用时遇到了NoClassDefFoundError,不过最终解决了,留下一个笔记供以后参考。 首先分析一下ClassNoDefFoundError异常,平时熟知的是ClassNotFoundException。ClassNotFoundExcept...

chuleng2697的博客 1005

Miniconda3迁移(附图详细过程)

服务器上目录占满,想要将conda迁移到其他目录下的操作方法,详细教程。

2301_77554343的博客 6942

交叉熵损失函数基本概念及公式

对于二分类问题,模型的输出通常是一个标量,表示样本属于正类的概率。因此,在二分类的交叉熵损失函数中,我们只需要考虑一个概率值,即模型预测为正类的概率。具体来说,当真实标签为1时,我们关注模型预测为正类的概率;当真实标签为0时,我们关注模型预测为负类的概率。因此,二分类的交叉熵损失函数可以表示为:其中,y 表示真实标签,取值为 0 或 1;p 表示模型预测为正类的概率。而对于多分类问题,模型的输出通常是一个向量,表示样本属于各个类别的概率。因此,在多分类的交叉熵损失函数中,我们需要考虑所有类别的概率。

qlkaicx的博客 1万+

怎么解决java.lang.NoClassDefFoundError错误

前言在日常Java开发中,我们经常碰到java.lang.NoClassDefFoundError这样的错误,需要花费很多时间去找错误的原因,具体是哪个类不见了?类明明还在,为什么找不到?而且我们很容易把java.lang.NoClassDefFoundError和java.lang.ClassNotfoundException这两个错误搞混,事实上这两个错误是完全不同的。我们往往花费时间去不断尝试

jamesjxin的专栏 123万+

Unity动态创建Avatar骨骼映射

Unity Avatar骨骼映射动态创建,适配Unity通用动画,无需经过第三方建模软件,可运行时创建

Nbin_Newby的博客 1万+

Java类加载失败异常:NoClassDefFoundError与ClassNotFoundException

一、NoClassDefFoundError:运行时加载不到类 在运行时,需要使用该类时,如调用该类的静态static方法或者创建该类的对象,无法从类路径加载该类而发生错误。无法加载可能类路径和mavne仓库确实是没有这个类,或者该类对当前的类加载器不可见,如tomcat容器中的不同应用使用不同类加载器。 出现场景: 常出现在:当通过手动安装某个第三方jar包,假如为A包,而A包又引用了另外一个...

源码之下,了无秘密 9622

100天精通Python(基础篇)——第20天:pip命令大全

pip升级命令:python -m pip install --upgrade pip pip install name //这里的name是要安装的第三方库名 pip install name -i http://mirrors.aliyun.com/pypi/simple/ 国内镜像源 阿里云:http://mirrors.aliyun.com/pypi/simple/ (推荐使用) 清华大学:https://pypi.tuna.tsinghua.edu.cn/simple 豆瓣:http:/

努力让自己发光,对的人才能迎着光而来 18万+

ESP32 DW1000 UWB 室内定位系统

详细介绍ESP32 DW1000 UWB 室内定位系统的设计演示demo。

DT程序员的博客 1662

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

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

dawuafang 991

银行统一监管报送系统

依据《银行业金融机构数据治理指引》,银行业金融机构应当建立适应监管数据报送工作需要的信息系统,实现流程控制的程序化,提高监管数据加工的自动化程度。银行业金融机构应当将监管数据纳入数据治理,建立工作机制和流程,确保监管数据报送工作有效组织开展,监管数据质量持续提升。银行通常要对接报送EAST5.0、1104、CRSS等近40个监管应用,涉及近1000张报表。表13-01是主要的监管报送应用、报送依据、报送规范、监管机构名称。

银行信息系统应用架构详解 4348

通用Adapter的尝试《第二篇》

经过昨天一天的尝试与上午的一些努力,通用的adapter终于是可以用了。没有继承RecycleView,直接写就可以 上午主要对上一篇文章中没有进行介绍的MultiItemCommonAdapter和MultiItemTypeSupport研究了一下,写一篇博客总结一下。 先看一下这两张图,这其中使用的就是ListView(先用ListView,recycle我还不会。。。。)

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

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

通用RecyclerViewAdapter---ZMRecyclerViewAdapter开源

写在前面 这个开源项目早就写了,但是最近闲下来整理了一下,总的来说,这是一个能够替换RecyclerViewAdapter的开源控件,能够实现少数几行代码就丰富RecycelrView的表现。封装的非常巧妙,调用极少的函数。 ZMRecyclerViewAdapter 项目地址 ZMRecyclerViewAdaper Gradle集成方法 //build.gradle allproj...

yourzeromax的博客 408

android 蓝牙通讯demo

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

使用Kotlin封装RecycleView和重构

今天,是对RecycleView.Adapter进行封装,形成通用的Apapter;RecycleView概念和用途,以为为什么要用RecycleView而不用Listview,这些我就不重复了,一搜一大把,写的都比我好,理解的也比我深入,这里,我要实现的就是使用Kotlin实现通用Adapter;为什么要实现通用Adapter,无非是我们的项目中,会出现各式各样的List展示,于是乎,就出现了无...

Fly0078的博客 955

通用的adapter

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

findsafety的专栏 491

尝试编写一个不需要记忆的工具(以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的专栏 566

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

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

wzx_442011334的博客 1055

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
上一篇: ViewPager的过渡动画
下一篇: 通用Adapter的尝试《第二篇》
hbl_for_android
博客等级 码龄11年 30粉丝 20原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值