AdapterView

指使用适配器来配置多个内容显示的视图,代表的有ListView(列表)、GridView(九宫格)、ExpanableListView(分组列表)

ListView

<ListViewandroid:id = "@+id/m_list"android:layout_width="match_parent"android:layout_height="match_parent"android:divider="#55666666"android:dividerHeight="5dp" >
</ListView>
android:divider="#55666666" 分割线的资源,可以是颜色或者是图片 (@drawable/xxx)
android:dividerHeight="5dp" 分割线的高度,处理两个 item 上下间距

Java中显示内容

吐司提示
Toast 是 Android 中的应用提示,可以显示一段时间然后自动消失,不影响用户操作

//数据
private String [] ary = {"发福蝶","大鸡居","小乌堆","小海疼","丹鼎货","小凶许"};@Overridepublic void onItemClick(AdapterView<?> parent , View itemView,int position,long id){log.e("m_tag","点击了:",ary[position]);//吐司提示//Context 对象,提示内容,提示时间 ( 长或者短时间的选择 )Toast.makeText(MainActivity.this, " 点击了 :" + ary[position],Toast.LENGTH_SHORT).show();}
};//item 长按监听
private OnItemLongClickListener mOnItemLongClick = new OnItemLongClickListener() {@Overridepublic boolean onItemLongClick(AdapterView<?> parent, View itemView,int position, long id) {Log.e("m_tag", " 长按了 :" + ary[position]);return true;}
};

使用监听

//设置Item点击监听
mListView.setOnItemClickListener(mOnItemClick);
//设置item长按监听
mListView.setOnItemLongClickListener(mOnItemLongClick);

自定义适配器

1、数据源的类型封装

public class User{//头像private int icon;// 昵称private String nick;// 签名private String sign;...
}

2、每个Item的布局效果:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content" ><ImageView
        android:id="@+id/item_icon"android:layout_width="80dp"android:layout_height="80dp"android:src="@drawable/pic0" /><TextView
        android: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" /><TextView
        android: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:maxLines="3"/>
</RelativeLayout>

3、定义类继承BaseAdapter,重写getCount、getItem、getItemId、getView

public class UserAdapter extends BaseAdapter {private List<User> list;//  布局加载器:可以将 xml 布局转为 View 对象private LayoutInflater mInflater;public UserAdapter(Context context, List<User> list) {this.list = list;//  初始化布局加载器mInflater = LayoutInflater.from(context);}//  配置显示总条数@Overridepublic int getCount() {return null == list ? 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.xml 文件转为 RelativeLayout 对象 )View layout = mInflater.inflate(R.layout.item_user_layout, null);// 初始化布局中的元素ImageView ivIcon = (ImageView) layout.findViewById(R.id.item_icon);TextView tvNick = (TextView) layout.findViewById(R.id.item_nick);TextView tvSign = (TextView) 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;}
}

4、使用

ListView userList = (ListView) findViewById(R.id.user_list);
// 初始化数据
List<User> list = new ArrayList<User>(7);
...
// 创建适配器
UserAdapter adapter = new UserAdapter(this, list);
userList.setAdapter(adapter);

适配器缓存

针对每个 item 的显示都需要通过 getView 来获取一个 View 对象,然后如果每次 getView 时都需要单独 new 的话会浪费资源,因此需要借助 getView 方法中的
convertView 来提升性能, convertView 表示的是之前的 item 显示时使用的 View 对象,但是那个 item 已经不可见了,因此可以直接使用 convertView 来显示新内容即可

@Override
public View getView(int position, View convertView, ViewGroup parent){ImageView iv;if (convertView == null) {iv = new ImageView(context);//  创建布局参数设置宽高AbsListView.LayoutParams lp = new AbsListView.LayoutParams(AbsListView.LayoutParams.MATCH_PARENT, 300);iv.setLayoutParams(lp);} else {iv = (ImageView) convertView;}iv.setImageResource(resIds[position]);return iv;
}

针对 item 布局中多个元素的情况,可以自己定义类关联数据的显示

class ViewHolder {ImageView ivIcon;TextView tvNick;TextView tvSign;
}
getView 处理方式
public View getView(int position, View convertView, ViewGroup parent) {Log.e("m_tag", " 显示 :" + position);ViewHolder holder;if (null == convertView) {Log.e("m_tag", " 加载布局 :" + position);//  加载每个 item 的布局对象 ( 完成了 item_user_layout.xml 文件转为 RelativeLayout 对象 )convertView = mInflater.inflate(R.layout.item_user_layout, null);holder = new ViewHolder();//  初始化布局中的元素holder.ivIcon = (ImageView) convertView.findViewById(R.id.item_icon);holder.tvNick = (TextView) convertView.findViewById(R.id.item_nick);holder.tvSign = (TextView) convertView.findViewById(R.id.item_sign);// 设置标记 ( 将已经初始化的视图保存起来,下次直接取出来显示即可 )convertView.setTag(holder);}else{holder = (ViewHolder) convertView.getTag();}//  获取数据显示内容 ( 数据绑定,将数据显示到布局中 )User u = list.get(position);holder.ivIcon.setImageResource(u.getIcon());holder.tvNick.setText(u.getNick());holder.tvSign.setText(u.getSign());return convertView;
}

Android基础篇(四)相关推荐

  1. 【建议收藏】2020年中高级Android大厂面试秘籍,为你保驾护航金三银四,直通大厂(Android基础篇)...

    前言 成为一名优秀的Android开发,需要一份完备的知识体系,在这里,让我们一起成长为自己所想的那样~. A awesome android expert interview questions a ...

  2. android各目录大小,Android 基础篇 — 放不同drawable文件夹中图片的大小

    我们接着上篇文章Android 基础篇 - 不同DPI取哪个本地文件夹中的资源 讲,文末尾提到一个问题,为什么不同drawable文件夹中的图片大小在终端设备会不一样? 1 准备 在drawable- ...

  3. Android基础篇 屏幕横竖屏切换(layout-land)下篇

    默认情况下Activity进行屏幕旋转会自动进行onDestroy并重新onCreate 一.非默认情况下 在AndroidManifest.xml的Activity中配置 <activitya ...

  4. Android基础(四):TCP/IP

    Android基础(四):TCP/IP 前言 其实就个人情感来讲,我并不是很想讲这块,甚至很想把这块直接在下个篇章也就是HTTPS中一笔略过的,但是最后仔细想想过后,还是一声长叹,干吧! 先来谈谈协议 ...

  5. 妥妥的去面试之Android基础(四)

    笔者由于在近期需要找工作,所以近期最主要的任务就是准备面试,不打无准备之仗.只有你准备充分了,那么你想得到的机会才可能有机会入你怀中. 笔者会将准备面试的学习过程记录下来,方便自己复盘的同时也希望能给 ...

  6. Android基础第四篇

    转载请标明出处: http://blog.csdn.net/gj782128729/article/details/52350060: 本文出自:[高境的博客] 1. Html简介 1.1. 什么是H ...

  7. Android 基础篇之环境配置

    Android接触也有半年了本来是打算一年后开始写博客,现在写的话显得有点班门弄斧的感觉,但是听到几个前辈们教导,还是现在养成这个好习惯吧, 因为才刚刚接触半年,也不算什么大神大牛 ,所以这几篇博客只 ...

  8. Android基础教程(四)之-----取得手机屏幕大小DisplayMetrics的应用

    2009-11-08 20:15:25 标签:Android 屏幕 手机 基础 教程 原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http: ...

  9. 【Android基础】四种基本布局

    介绍 布局是一种可以用于放置很多控件的容器,可以按照一定的规律调整内部控件的位置,从而编写处精美的界面. 布局的内部除了放置控件外,还可以放置布局,通过多层布局的嵌套,可以完成比较复杂的界面实现,如下 ...

最新文章

  1. 解决linux 系统中Mysql 进程占用CPU 300%故障
  2. ctf安全竞赛入门pdf_CTF安全竞赛入门
  3. 【PAT乙级】1058 选择题 (20 分)
  4. DVWA——Sqlmap练习
  5. php 格式化 sub,PHP DateTime sub()用法及代码示例
  6. php二进制保存到本地,C# 将二进制字符串保存到本地
  7. 性能测试 - 响应 vs 延迟 vs 吞吐量 vs 负载 vs 扩展性 vs 压力 vs 健壮性
  8. 使用自定义条件触发Nintex workflow
  9. RNN、CNN、RNN、LSTM、CTC算法原理,pytorch实现LSTM算法
  10. 论文引用图片时的版权声明(Reproduced with permission, courtesy of [copyright owner])
  11. 电视制式 NTSC PAL SECAM
  12. Scratch(五):Scratch小游戏之超级玛丽
  13. 公开密匙(public key)和专用密匙(private key)
  14. 如何建立自己的【渲染农场】终极指南(2)
  15. kubernetes中容器(pod)间的通信及环境变量设置
  16. 健美运动员赛前脱水断碳_健美冠军指导书:赛前的去碳与充碳技巧(上)
  17. centos/redhat kernel-debug-info-xx.rpm与kernel-debuginfo-xx.rpm区别
  18. css+nth-child+无效,CSS nth-child()和:eq()在我的代码中不起作用
  19. 最新的一篇视觉Transformer综述!
  20. 幼儿园ppt计算机考试试题,《幼儿园课件制作》期末试卷A卷

热门文章

  1. 【Windows 安装JDK8】如何安装java JDK8
  2. [STM32]jlink RTT使用详解
  3. 如何拦截烦人的视频广告
  4. linux的服务器查看流量,查看linux服务器流量的方法总结
  5. 【pandas】教程:2-读写表格数据
  6. GIS大讨论(十):GIS专业就业之职业态度
  7. 主数据方法论之数据分发与共享
  8. 【ae遮罩】混合模式:模板alpha,轮廓alpha
  9. ToLua原理和使用教程
  10. JavaScript制作简易聊天窗口