在实际应用中常常需要用到自定义的适配器来显示视图比如qq好友列表等等,

对于这样的视图需求我们可以简单分析下所需要的内容。首先这个界面需要一个ListView。而每一个item需要有ImageView,TextView。而这需要适配器来关联item。

首先需要listView

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"tools:context=".MainActivity"><ListView
        android:id="@+id/user_list"android:layout_width="match_parent"android:layout_height="match_parent"android:divider="#eeeeee"android:dividerHeight="10dp"></ListView>
</LinearLayout>

对于要显示的内容需要封装一个类User

public class User {//头像private int icon;//昵称private String nick;//签名private String sign;public int getIcon() {return icon;}public void setIcon(int icon) {this.icon = icon;}public String getNick() {return nick;}public void setNick(String nick) {this.nick = nick;}public String getSign() {return sign;}public void setSign(String sign) {this.sign = sign;}public User(int icon, String nick, String sign) {this.icon = icon;this.nick = nick;this.sign = sign;}
}

接下来就是自定义适配器了,这个adapter需要继承自BaseAdapter

public class UserAdapter extends BaseAdapter {private List<User> list ;//布局加载器:将xml转为View对象RelativeLayoutprivate LayoutInflater mInflater;public UserAdapter(Context context , List<User> list){this.list = list;//初始化布局加载器mInflater = LayoutInflater.from(context);}//配置显示的总item数量@Overridepublic int getCount() {return list == null?0:list.size();}//按照位置获取数据对象@Overridepublic Object getItem(int position) {return list.get(position);}//根据位置获取item的id@Overridepublic long getItemId(int position) {return position ;}//每个item的显示效果@Overridepublic View getView(int position, View convertView, ViewGroup parent) {//加载每个item的布局对象(将item_user_layout转为RelativeLayout对象)View layout = mInflater.inflate(R.layout.item_user_layout,null);//初始化布局中的元素ImageView ivIcon = layout.findViewById(R.id.item_icon);TextView tvNick = layout.findViewById(R.id.item_nick);TextView tvSign = layout.findViewById(R.id.item_sign);//获取数据显示内容(数据绑定,将数据显示到布局中)User u = list.get(position);ivIcon.setImageResource(u.getIcon());tvNick.setText(u.getNick());tvSign.setText(u.getSign());return layout;}
}#### 对于item显示需要用到对应的布局,尤其是需要使用布局加载器 LayoutInflater来加载对应的布局```
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"tools:context=".MainActivity"><ImageViewandroid:id="@+id/item_icon"android:layout_width="150dp"android:layout_height="150dp"android:src="@drawable/i1"/><TextViewandroid:id="@+id/item_nick"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_toRightOf="@id/item_icon"android:text="ABC"android:textSize="20sp"android:layout_marginLeft="5dp"/><TextViewandroid:id="@+id/item_sign"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_alignBottom="@id/item_icon"android:layout_alignLeft="@id/item_nick"android:text="ABC"android:textSize="20sp"android:maxLines="3"android:ellipsize="end"/></RelativeLayout>

当所有的东西准备好之后我们就需要在MainActivity内去加载这些数据了,特别是需要数据源

public class MainActivity extends AppCompatActivity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);ListView userList = findViewById(R.id.user_list);//初始化数据List<User> list = new ArrayList<>(13);***//通过资源名称加载资源id//资源名称(不要后缀名),资源类型,资源所在的包名(R的包名就是应用包名)int resId1 = getResources().getIdentifier("i1","drawable","com.xykj.zdyadapter");***User u1 = new User(resId1,"轩辕","即黄帝(公元前2717年-公元前2599年):古华夏部落联盟首领,中国远古时代华夏民族的共主。五帝之首。被尊为中华“人文初祖”。据说他是少典与附宝之子,本姓公孙,后改姬姓,故称姬轩辕。居轩辕之丘,号轩辕氏,建都于有熊,亦称有熊氏。也有人称之为“帝鸿氏”。");list.add(u1);int resId2 = getResources().getIdentifier("i2","drawable","com.xykj.zdyadapter");User u2 = new User(resId2,"端木","端木姓为汉字复姓。端木此姓相当的古老,自东周时期便有此姓,据元和姓纂记载,端木一姓的祖宗为孔子弟子端木赐(即子贡),系出于卫国。端木姓分布相当的广,但后来大多改姓为端姓、木姓、沐姓,故今日已不多见。");list.add(u2);int resId3 = getResources().getIdentifier("i3","drawable","com.xykj.zdyadapter");User u3 = new User(resId3,"司马","司马(sī mǎ):西晋国姓,中华姓氏之一,复姓。源于西周,以官职为姓。西周始置,司马与司徒、司空并称“三有司”。在宋版《百家姓》中排序为第四百一十位。");list.add(u3);int resId4 = getResources().getIdentifier("i4","drawable","com.xykj.zdyadapter");User u4 = new User(resId4,"上官","上官姓在中国的大陆和台湾省都没有列入百家姓前三百位,在宋版《百家姓》中排序为第四百一十一位,新姓氏人口排序第510位,约有7.5万余人。");list.add(u4);int resId5 = getResources().getIdentifier("i5","drawable","com.xykj.zdyadapter");User u5 = new User(resId5,"欧阳","欧阳姓,中华姓氏之一,为汉族复姓之首。据2014年统计,欧阳姓为324万。在中国排86位。");list.add(u5);int resId6 = getResources().getIdentifier("i6","drawable","com.xykj.zdyadapter");User u6 = new User(resId6,"慕容","慕容姓《三国志·鲜卑传》中提到,汉桓帝时,鲜卑分为中、东、西三部,中部大夫柯最阙,居慕容寺。而从《通志·氏族略》的记载上考究,慕容氏出自中古时期,部族首领高辛氏的后裔,建立鲜卑国,自言慕二仪(天地)之道,继三光(日、月、星)之容,因此以慕容为姓,称为慕容氏。历史上的鲜卑族在今内蒙西拉木伦河与洮儿河之间。慕容氏的发源地和老家便在这里。");list.add(u6);int resId7 = getResources().getIdentifier("i7","drawable","com.xykj.zdyadapter");User u7 = new User(resId7,"司空","司空是中国古代官名。西周始置,位次三公,与六卿相当,与司马、司寇、司士、司徒并称五官,掌水利、营建之事,金文皆作司工。春秋、战国时沿置。是周代掌管当时代表最先进科学技术水平的工部的手工业制造官员。汉朝本无此官,成帝时改御史大夫为大司空,但职掌与周代的司空不同。司空亦为中国姓氏之一。");list.add(u7);int resId8 = getResources().getIdentifier("i8","drawable","com.xykj.zdyadapter");User u8 = new User(resId8,"东皇","东皇太一是《九歌》体系中所祭祀的天帝、至高神。“东皇太一”与汉武帝祭祀的至高神“太一神”、汉代之后的文献里记载的“泰一”、“泰皇”、“泰壹氏”等,均有关。");list.add(u8);int resId9 = getResources().getIdentifier("i9","drawable","com.xykj.zdyadapter");User u9 = new User(resId9,"刑天","是中国古代神话传说人物之一,和黄帝争位。据《山海经·海外西经》当中记载:“ 刑天与帝至此争神,帝断其首,葬之於常羊之山,乃以乳为目,以脐为口,操干戚以舞。");list.add(u9);int resId10 = getResources().getIdentifier("i10","drawable","com.xykj.zdyadapter");User u10 = new User(resId10,"蚩尤","蚩尤,是上古时代九黎氏族部落联盟的首领,骁勇善战,相传蚩尤是牛图腾和鸟图腾氏族的首领,有说是和炎帝同属一个部落。他有兄弟八十一人,个个本领非凡。");list.add(u10);int resId11 = getResources().getIdentifier("i11","drawable","com.xykj.zdyadapter");User u11 = new User(resId11,"应龙","应龙是古代中国神话传说中一种有翼的龙,又名飞龙,亦作黄龙,另有学者推测应龙以庚辰为名;本居于天,曾作为黄帝大将斩杀蚩尤、夸父,曾以尾画地成江,助大禹治水,擒获无支祁。");list.add(u11);int resId12 = getResources().getIdentifier("i12","drawable","com.xykj.zdyadapter");User u12 = new User(resId12,"李牧","李牧是战国末年东方六国最杰出的将领。 [1]  深得士兵和人民的爱戴,有着崇高的威望。在一系列的作战中,他屡次重创敌军而未尝败,显示了高超的军事指挥艺术。");list.add(u12);int resId13 = getResources().getIdentifier("i13","drawable","com.xykj.zdyadapter");User u13 = new User(resId13,"白起","白起是继中国历史上自孙武、吴起之后又一个杰出的军事家、统帅,《千字文》将他与廉颇、李牧、王翦并称为战国四大名将,位列战国四大名将之首。");list.add(u13);//创建适配器UserAdapter adapter = new UserAdapter(MainActivity.this,list);userList.setAdapter(adapter);}
}

需要注意的是这种显示的姓名以及简介都是不一样的内容,因此不建议使用数组进行封装。到此所有的数据都已经被组装完毕,可以看看运行效果

需要注意的是文本显示的内容根据个人喜好可以自行设定,当显示的内容较多时ListView会自带滚动条效果而不需要自己再去创建一个滚动条。

如果想实现qq好友一样的列表用这个方法还不够,这个以后再讨论。

自定义适配器(Adapter)的使用相关推荐

  1. XamarinAndroid组件教程RecylerView自定义适配器动画

    XamarinAndroid组件教程RecylerView自定义适配器动画 如果RecyclerViewAnimators.Adapters命名空间中没有所需要的适配器动画,开发者可以自定义动画.此时 ...

  2. 【RecyclerView】 一、RecyclerView 最基本用法 ( 添加支持库 | 设置布局文件 | 自定义适配器 )

    文章目录 一.添加支持库 二.布局文件中使用 RecyclerView 三.自定义适配器 四.RecyclerView 设置流程 五.RecyclerView 完整 Java 代码示例 一.添加支持库 ...

  3. ListView通过自定义适配器来显示数据并对Item项以及子view项的控件实现监听.

    本篇主要功能. 通过xml pull解析得到数据,然后通过自定义的Adapter绑定数据源,ListView绑定适配器,并且实现Item项的点击事件以及子View控件的点击事件. 一.实体类. Boo ...

  4. android 之自定义适配器(重写的getView()方法中convertView元素的妙用)一个实例

    实现效果: 主要还是ListView的优化: 基本思路: <1>使用自定义适配器完成操作 <2>将listView进行优化处理 /*  //ListView完成了重用条目的优化 ...

  5. android适配器Adapter

    一.什么是适配器,适配器有什么用? 适配器是AdapterView视图(如ListView - 列表视图控件.Gallery - 缩略图浏览器控件.GridView - 网格控件.Spinner - ...

  6. 带有自定义适配器示例教程的Android ListView

    In this tutorial we'll use a CustomAdapter that populates the custom rows of the Android ListView wi ...

  7. mp8播放器 android 1.4,listview(自定义适配器)与媒体播放器android

    嘿家伙我在listview(自定义适配器)面临问题 . 我已经实现了播放音频(mp3文件)的媒体播放器的listview . 我已经在我的原始文件夹中包含了mp3文件 . 我知道这是一个循环视图 . ...

  8. java方便适配器,JAXB简单自定义适配器以及简单使用

    JAXB(Java Architecture for XML Binding) 是一个业界的标准,是一项可以根据XML Schema产生Java类的技术.该过程中,JAXB也提供了将XML实例文档反向 ...

  9. android listview使用自定义的adapter没有了OnItemClickListener事件解决办法

    在使用listview的时用使用自定义的adapter的时候,如果你的item布局中包含有Button,Checkable继承来的所有控件,那么你将无法获取listview的onItemClickLi ...

最新文章

  1. 使用卷积神经网络预防疲劳驾驶事故
  2. 读书笔记-我所理解的生活
  3. Android 模糊效果
  4. 创建自己的内容提供器
  5. curl请求模拟post发送json
  6. JS第三方中间件的延伸
  7. Aruba 推出Instant On 为中小型企业提供安全、高速的无线连接
  8. Silverlight 5 Beta新特性[5]隐式模板支持
  9. vue文件里在style的样式需要什么loader_Vue学习笔记之Webpack中css、less、图片等文件处理...
  10. java必会的英语单词
  11. 度身定造的女孩子C程序
  12. Transformer的一家!
  13. 计算机算法设计与分析 第5版 (王晓东) 课后答案[解析]
  14. 如何判断矩阵的谱半径 C语言,矩阵谱半径
  15. 移动开发平台WorkPlus | 快速实现企业移动应用集成化
  16. 微信官方你真的懂OAuth2?Spring Security OAuth2整合企业微信扫码登录
  17. Python爬虫:人人影视追剧脚本
  18. 在线制作banner的网站
  19. 栈的基本操作 python
  20. Idea解决jar包冲突问题

热门文章

  1. C++ 拷贝、复制、赋值 、初始化的理解
  2. nginx下禁止垃圾蜘蛛爬取网站,只保留百度蜘蛛和搜狗360神马等
  3. 微博动态来自Android,Android新浪微博开发(二)主UI的实现:动态建立TabActivity
  4. php输出数组进行格式化
  5. 可控定时任务 框架设计实现
  6. 船长BI获近1亿人民币A轮融资,领航跨境电商数字化SaaS服务
  7. 怎么给计算机主机设置密码,怎么给电脑设置密码,详细教您电脑怎么设置密码...
  8. 直播源代码简易音乐播放盒
  9. 计算机考研辅导书电子版,2021广东工业大学计算机技术考研真题经验参考书.pdf...
  10. ZIP压缩文件密码忘记了怎么办?怎么破解?