最近一个多月忙着使用新的技术来做项目,现在项目上线了,嗯,发现android有些生疏了,所以今天特地写了这一篇博客来相信的讲解一些基础知识,同事呢,也可以让我温故知新一下。进入正题。

什么是listview呢,它有什么作用呢,并且应该怎么使用呢?下面就好好讲解一下。

listview,你可以这样理解,这是一个列表,在手机屏幕上以列表的形式展示每一条数据,比如我们很熟悉的腾讯qq中腾讯新闻,那一条条新闻,就是使用了listview来实现,通过listview来把这些数据展示到手机屏幕上。我个人认为,listview这个控件在android中是相当相当的重要的。

下面,我们看看怎么使用它。

首先,我们在布局文件中将这个控件添加进来

<ListView
android:id="@+id/listview"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:scrollbars="none" />
android:scrollbars="none"这个是listView中的一个属性,作用是去掉滑动进度条。而id的作用主要是获得获得这个listview控件,然后我们在java文件中通过findViewById(R.id.listview)来拿到这个控件。好下面最主要的部分来了。
我们知道,listview的作用是将数据以列表的形式展示出来,那么那么列表中每一个item中的数据是是怎么弄呢?adapter的作用就出来了,adapter 也叫适配器,你可以理解为是一个中转站。
那么adapter怎么用呢,上代码:
  1. public class ListViewAdapter extends BaseAdapter {
  2. View[] itemViews;
  3. public ListViewAdapter(List<info> mlistInfo) {
  4. // TODO Auto-generated constructor stub
  5. itemViews = new View[mlistInfo.size()];
  6. for(int i=0;i<mlistInfo.size();i++){
  7. info getInfo=(info)mlistInfo.get(i);    //获取第i个对象
  8. //调用makeItemView,实例化一个Item
  9. itemViews[i]=makeItemView(
  10. getInfo.getTitle(), getInfo.getDetails(),getInfo.getAvatar()
  11. );
  12. }
  13. }
  14. public int getCount() {
  15. return itemViews.length;
  16. }
  17. public View getItem(int position) {
  18. return itemViews[position];
  19. }
  20. public long getItemId(int position) {
  21. return position;
  22. }
  23. //绘制Item的函数
  24. private View makeItemView(String strTitle, String strText, int resId) {
  25. LayoutInflater inflater = (LayoutInflater) ListTestActivity.this
  26. .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
  27. // 使用View的对象itemView与R.layout.item关联
  28. View itemView = inflater.inflate(R.layout.item, null);
  29. // 通过findViewById()方法实例R.layout.item内各组件
  30. TextView title = (TextView) itemView.findViewById(R.id.title);
  31. title.setText(strTitle);    //填入相应的值
  32. TextView text = (TextView) itemView.findViewById(R.id.info);
  33. text.setText(strText);
  34. ImageView image = (ImageView) itemView.findViewById(R.id.img);
  35. image.setImageResource(resId);
  36. return itemView;
  37. }
  38. public View getView(int position, View convertView, ViewGroup parent) {
  39. if(convertView == null)

    {

    convertView = mInflater.inflate(R.layout.list_item, null);

    }

    ImageView img = (ImageView)convertView.findViewById(R.id.img)

    TextView title = (TextView)convertView.findViewById(R.id.title);

    TextView info = (TextView)ConvertView.findViewById(R.id.info);

    img.setImageResource(R.drawable.ic_launcher);

    title.setText("Hello");

    info.setText("world");

    return convertView;

    }

  40. }
  41. public class ViewHolder(){
  42. //获取控件
  43. }
  44. }

首先继承BaseAdapter,然后实现四个方法,

getCount() ,这个方法的作用的是显示listview中item的个数。getItem()是得到每一个item的位置,getItemId(),是指每一个item的ID,最后一个方法,也是最重要的一个方法getView(),这个方法涉及到整个listview的机制,比如复用,

该怎么解释这个复用机制的,举个例子,我们用10个圆形滚木,要移动一个很重的物体,当物体滚到前面,物体地下最后面的一个滚木就拿到最前面,listview复用也是这个原理。

先创建一个内部类,viewholder可以理解为在每一个滚木中做一个标记,等下一看到这个标记的时候,系统就可以知道,又用到这个滚木了,然后通过判断convertView使用为空,如果为空的话,说明这个滚木没有使用过,则系统会填充器LayoutInflater来将这个滚木做一个标记,如果不为空的话,说明使用过了,则也是TextView title = (TextView)convertView.findViewById(R.id.title);通过convertView来获取控件。

好了,适配器的讲解到这,那么我们在java代码中怎样使用它的,在java代码中通过findViewById这个方法来获取listview这个控件,然后

ListViewAdapter mAdapter = new ListViewAdapter(),来得到这个适配器,最后通过listview.setAdapter(mAdapter),就OK了。






Listview的使用的更多相关文章

  1. 张高兴的 UWP 开发笔记:横向 ListView

    ListView 默认的排列方向是纵向 ( Orientation="Vertical" ) ,但如果我们需要横向显示的 ListView 怎么办? Blend for Visua ...

  2. Android—万能ListView适配器

    ListView是开发中最常用的控件了,但是总是会写重复的代码,浪费时间又没有意义. 最近参考一些资料,发现一个万能ListView适配器,代码量少,节省时间,总结一下分享给大家. 首先有一个自定义的 ...

  3. Android—ListView条目背景为图片时,条目间距问题解决

    ListView是android开发中使用最普遍的控件了,可有的listView条目的内容颇为丰富,甚至为了美观,背景用指定图片,如下图:

  4. Android中ListView实现图文并列并且自定义分割线(完善仿微信APP)

    昨天的(今天凌晨)的博文<Android中Fragment和ViewPager那点事儿>中,我们通过使用Fragment和ViewPager模仿实现了微信的布局框架.今天我们来通过使用Li ...

  5. listview下拉刷新和上拉加载更多的多种实现方案

    listview经常结合下来刷新和上拉加载更多使用,本文总结了三种常用到的方案分别作出说明. 方案一:添加头布局和脚布局        android系统为listview提供了addfootview ...

  6. Android listview和gridview以及view的区别

    GridView 可以指定显示的条目的列数. listview一般显示的条目的列数都是一列 如果是列表(单列多行形式)的使用ListView,如果是多行多列网状形式的优先使用GridView andr ...

  7. mono for android Listview 里面按钮 view Button click 注册方法 并且传值给其他Activity 主要是context

    需求:为Listview的Item里面的按钮Button添加一个事件,单击按钮时通过事件传值并跳转到新的页面. 环境:mono 效果: 布局代码 主布局 <?xml version=" ...

  8. 【腾讯Bugly干货分享】跨平台 ListView 性能优化

    本文来自于腾讯Bugly公众号(weixinBugly),未经作者同意,请勿转载,原文地址:https://mp.weixin.qq.com/s/FbiSLPxFdGqJ00WgpJ94yw 导语 精 ...

  9. android内部培训视频_第三节(3)_常用控件(ViewPager、日期时间相关、ListView)

    第三节(2):常用控件之ViewPager.日期时间相关.ListView  一.ViewPager 实例:结合PagerAdapter滑动切换图片  二.日期时间相关:AnalogClock\Dig ...

  10. 父ListView嵌套子ListView时点击事件没有响应

    转发请备注出处:http://www.cnblogs.com/LT5505/p/5972999.html 问题: 在ListView中嵌套ListView之后,子ListView会把父ListView ...

随机推荐

  1. IE8的parseInt

    踩到一个IE8的parseInt的坑: Chrome:

  2. 求1...n中因子最多的数

    Problem 求[1..N]中素因子数最多且最小的数n,N充分大. Solution 将任意自然数n (n>2) 分解 n=p1^k1 * p2^k2 * p3^k3 * ... * Pm^k ...

  3. linux配置java开发环境

    一.下载jdk java -version 查看有没有安装jdk 下载对应版本的jdk:jdk-java7u60-linux-x64.tar.gz   二.解压 cp jdk-java7u60-lin ...

  4. CentOS个人目录下中文路径转英文路径

    CentOS个人目录下中文路径转英文路径 如果安装了中文版到CentOS之后,root目录及home目录下会出现中文到路径名,如"桌面"."文档"," ...

  5. mysql问题

    mysql x64,由于没有msi版,因此,在使用上可能会出现一些问题. 一.  配置环境变量: 只需把mysql/bin文件夹地址完整地添加到Path中,用“;”与前面的参数隔开.需注意,mysql ...

  6. IK分词器 整合solr4.7 含同义词、切分词、停止词

    转载请注明出处! IK分词器如果配置成 <fieldType name="text_ik" class="solr.TextField"> < ...

  7. c标签遍历List<Map<String, Object>> 数据格式

    <c:forEach varStatus="loop" var="dataMap" items="${dataMap}"> &l ...

  8. JavaScript 快速排序(Quicksort)

    "快速排序"的思想很简单,整个排序过程只需要三步: (1)在数据集之中,选择一个元素作为"基准"(pivot). (2)所有小于"基准"的元 ...

  9. 【Go入门教程7】并发(goroutine,channels,Buffered Channels,Range和Close,Select,超时,runtime goroutine)

    有人把Go比作21世纪的C语言,第一是因为Go语言设计简单,第二,21世纪最重要的就是并行程序设计,而Go从语言层面就支持了并行. goroutine goroutine是Go并行设计的核心.goro ...

  10. Go - 字典(map)

    字典是一种内置的数据结构,用来保存 键值对 的 无序集合. (1)字典的创建 1) make(map[KeyType] ValueType, initialCapacity) 2) make(map[ ...