文章目录

  • ListView_BaseAdapter简单实用
    • 本节引言
    • 1.自定义BaseAdapter,然后绑定ListView的最简单例子
    • 2.表头表尾分割线的设置
    • 3.列表从底部开始显示:stackFromBottom
    • 4.设置点击颜色cacheColorHint
    • 5.隐藏滑动条

ListView_BaseAdapter简单实用

本节引言

本节我们来继续学习没有讲完的UI控件部分, 回顾上一节,我们介绍了Adapter适配器的概念,然后学习了三个最简单的适配器的使用:
ArrayAdapter,SimpleAdapter和SimpleCursorAdapter,而本节给大家讲解的是第一个 需搭配Adapter使用的UI控件:ListView,不过在版本中被RecyclerView这个新控件替换掉了!
列表作为最常用的控件之一,还是有必要好好学习的,本节以一个初学者的角度来学习 ListView,ListView的属性,以及BaseAdapter简单定义,至于ListView优化这些, 我们一步步来~莫急!


1.自定义BaseAdapter,然后绑定ListView的最简单例子

先看看我们要实现的效果图:

一个很简单的ListView,自己写下Item,然后加载点数据这样~ 下面贴下关键代码:

Animal.java:

/*** Created by Jay on 2015/9/18 0018.*/
public class Animal {private String aName;private String aSpeak;private int aIcon;public Animal() {}public Animal(String aName, String aSpeak, int aIcon) {this.aName = aName;this.aSpeak = aSpeak;this.aIcon = aIcon;}public String getaName() {return aName;}public String getaSpeak() {return aSpeak;}public int getaIcon() {return aIcon;}public void setaName(String aName) {this.aName = aName;}public void setaSpeak(String aSpeak) {this.aSpeak = aSpeak;}public void setaIcon(int aIcon) {this.aIcon = aIcon;}
}

AnimalAdapter.java:自定义的BaseAdapter:

/*** Created by Jay on 2015/9/18 0018.*/
public class AnimalAdapter extends BaseAdapter {private LinkedList<Animal> mData;private Context mContext;public AnimalAdapter(LinkedList<Animal> mData, Context mContext) {this.mData = mData;this.mContext = mContext;}@Overridepublic int getCount() {return mData.size();}@Overridepublic Object getItem(int position) {return null;}@Overridepublic long getItemId(int position) {return position;}@Overridepublic View getView(int position, View convertView, ViewGroup parent) {convertView = LayoutInflater.from(mContext).inflate(R.layout.item_list_animal,parent,false);ImageView img_icon = (ImageView) convertView.findViewById(R.id.img_icon);TextView txt_aName = (TextView) convertView.findViewById(R.id.txt_aName);TextView txt_aSpeak = (TextView) convertView.findViewById(R.id.txt_aSpeak);img_icon.setBackgroundResource(mData.get(position).getaIcon());txt_aName.setText(mData.get(position).getaName());txt_aSpeak.setText(mData.get(position).getaSpeak());return convertView;}
}

最后是MainActivity.java

public class MainActivity extends AppCompatActivity {private List<Animal> mData = null;private Context mContext;private AnimalAdapter mAdapter = null;private ListView list_animal;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);mContext = MainActivity.this;list_animal = (ListView) findViewById(R.id.list_animal);mData = new LinkedList<Animal>();mData.add(new Animal("狗说", "你是狗么?", R.mipmap.ic_icon_dog));mData.add(new Animal("牛说", "你是牛么?", R.mipmap.ic_icon_cow));mData.add(new Animal("鸭说", "你是鸭么?", R.mipmap.ic_icon_duck));mData.add(new Animal("鱼说", "你是鱼么?", R.mipmap.ic_icon_fish));mData.add(new Animal("马说", "你是马么?", R.mipmap.ic_icon_horse));mAdapter = new AnimalAdapter((LinkedList<Animal>) mData, mContext);list_animal.setAdapter(mAdapter);}}

好的,自定义BaseAdapter以及完成数据绑定就是这么简单~别问我拿示例的代码,刚开始学就会写出这些代码,我只是演示下流程,让大家熟悉 熟悉而已~

另外,也是为下面的属性验证做准备~

返回顶部


2.表头表尾分割线的设置

listview作为一个列表控件,他和普通的列表一样,可以自己设置表头与表尾: 以及分割线,可供我们设置的属性如下:

  • footerDividersEnabled:是否在footerView(表尾)前绘制一个分隔条,默认为true
  • headerDividersEnabled:是否在headerView(表头)前绘制一个分隔条,默认为true
  • divider:设置分隔条,可以用颜色分割,也可以用drawable资源分割
  • dividerHeight:设置分隔条的高度

翻遍了了API发现并没有可以直接设置ListView表头或者表尾的属性,只能在Java中写代码 进行设置了,可供我们调用的方法如下:

  • addHeaderView(View v):添加headView(表头),括号中的参数是一个View对象
  • addFooterView(View v):添加footerView(表尾),括号中的参数是一个View对象
  • addHeaderView(headView, null, false):和前面的区别:设置Header是否可以被选中
  • addFooterView(View,view,false):同上

对了,使用这个addHeaderView方法必须放在listview.setAdapter前面,否则会报错。

使用示例

运行效果图

代码实现

先编写下表头与表尾的布局:

view_header.xml(表头),表尾一样,就不贴了:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"android:gravity="center"><TextViewandroid:layout_width="match_parent"android:layout_height="48dp"android:textSize="18sp"android:text="表头"android:gravity="center"android:background="#43BBEB"android:textColor="#FFFFFF"/>
</LinearLayout>

MainActivty.java:

public class MainActivity extends AppCompatActivity implements AdapterView.OnItemClickListener{private List<Animal> mData = null;private Context mContext;private AnimalAdapter mAdapter = null;private ListView list_animal;private LinearLayout ly_content;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);mContext = MainActivity.this;list_animal = (ListView) findViewById(R.id.list_animal);//动态加载顶部View和底部Viewfinal LayoutInflater inflater = LayoutInflater.from(this);View headView = inflater.inflate(R.layout.view_header, null, false);View footView = inflater.inflate(R.layout.view_footer, null, false);mData = new LinkedList<Animal>();mData.add(new Animal("狗说", "你是狗么?", R.mipmap.ic_icon_dog));mData.add(new Animal("牛说", "你是牛么?", R.mipmap.ic_icon_cow));mData.add(new Animal("鸭说", "你是鸭么?", R.mipmap.ic_icon_duck));mData.add(new Animal("鱼说", "你是鱼么?", R.mipmap.ic_icon_fish));mData.add(new Animal("马说", "你是马么?", R.mipmap.ic_icon_horse));mAdapter = new AnimalAdapter((LinkedList<Animal>) mData, mContext);//添加表头和表尾需要写在setAdapter方法调用之前!!!list_animal.addHeaderView(headView);list_animal.addFooterView(footView);list_animal.setAdapter(mAdapter);list_animal.setOnItemClickListener(this);}@Overridepublic void onItemClick(AdapterView<?> parent, View view, int position, long id) {Toast.makeText(mContext,"你点击了第" + position + "项",Toast.LENGTH_SHORT).show();}
}

好的,代码还是比较简单的,从上面我们看出来一个要注意的问题,就是:

添加表头表尾后,我们发现positon是从表头开始算的,就是你添加的第一个数据本来的 postion 是 0,但是此时却变成了 1,因为表头也算!!

返回顶部


3.列表从底部开始显示:stackFromBottom

如果你想让列表显示你列表的最下面的话,那么你可以使用这个属性,将stackFromBottom 属性设置为true即可,设置后的效果图如下:

返回顶部


4.设置点击颜色cacheColorHint

如果你为ListView设置了一个图片作为Background的话,当你拖动或者点击listView空白位置会发现 item都变成黑色了,这是时候我们可以通过这个cacheColorHint将颜色设置为透明:#00000000

返回顶部


5.隐藏滑动条

我们可以通过设置:android:scrollbars=“none” 或者 setVerticalScrollBarEnabled(true); 解决这个问题!

返回顶部


【Android 常见控件使用】ListView_BaseAdapter 自定义Adapter简单使用相关推荐

  1. android控件使用大全,Android常见控件使用详解

    本文实例为大家分享了六种Android常见控件的使用方法,供大家参考,具体内容如下 1.TextView 主要用于界面上显示一段文本信息 2.Button 用于和用户交互的一个按钮控件 //为Butt ...

  2. 【Android 常见控件使用】ImageView(图像视图)

    文章目录 ImageView(图像视图) 本节引言 1.src属性和background属性的区别 1)写代码验证区别 2)解决blackground拉伸导致图片变形的方法 3)设置透明度的问题 4) ...

  3. 【Android 常见控件使用】AlertDialog(对话框)详解

    文章目录 AlertDialog(对话框)详解 本节引言 1.基本使用流程 2.几种常用的对话框使用示例 3.通过Builder的setView()定制显示的AlertDialog AlertDial ...

  4. 【Android 常见控件使用】EditText(输入框)

    文章目录 EditText(输入框) 本节引言 1.设置默认提示文本 2.获得焦点后全选组件内所有文本内容 3.限制EditText输入类型 4.设置最小行,最多行,单行,多行,自动换行 5.设置文字 ...

  5. android组合控件的焦点,撸一个简单的TV版焦点控制的日历控件

    1.效果 最近需求要一个遥控控制的日历控件,找了半天没找到轮子,就自己撸一个,先看效果图: 效果图.gif 2.XML属性,所有属性默认为效果图 calender_textSize:星期和日期的字体大 ...

  6. Android基础控件——ImageView的自定义,巧用Matrix实现图片不变形的炫酷PK条

    前言 在开发中常常会遇到PK条制作,如果在PK条中是纯色的情况下,比较好办,如下: 我们通常会设置其权重进行更新两个PK条的进度,实现起来也简单 //更新PkBar宽度比例 private void ...

  7. Android基础控件——SeekBar的自定义,超短代码模仿抖音带有数字拖拽进度条

    前言 在开发中,经常会遇到SeekBar组件的开发,一个高效的自定义SeekBar显得尤为重要,笔者刚好也在项目中大量使用带有数字的拖拽进度条,在深思熟虑后,打算从继承源码形式上,把数字绘制在拖拽进度 ...

  8. Android常见控件— — —EditText

    <?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android=" ...

  9. 一步一步学android之控件篇——ListView自定义显示数据格式

    上一篇博客说了ListView的基本使用,这篇将是对ListView的使用进行一个提高,在日常生活中,如果单单给你看一些图片,你可能都不知道这个图片表达的什么意思,但是要是在图片旁边写的备注或者加个名 ...

  10. [Android Studio]掌握Android Studio的五种常见控件和五种常见布局

    目录 一.View和ViewGroup 二.Android的五种常见控件 2.1 文本控件 2.1.1 TextView 2.1.2 EditText 2.2 按钮控件 2.2.1 Button 2. ...

最新文章

  1. iphonex如何关机_iPhone X手机屏幕出现绿线怎么回事_屏幕绿线该如何处理?
  2. 制作网站设计项目进度表让用户充分了解网站制作进程
  3. Linux基础命令-mkdir
  4. mysql插入大量数据总结
  5. 【转】centos安装vim7.4
  6. django restful 请求_利用 Django REST framework 构建 RESTful Web API
  7. ValueError: check_hostname requires server_hostname的解决办法
  8. Windows下如何查看某个端口被谁占用并强制关闭
  9. 算法导论-堆排序习题解
  10. 《每日一剂》适配器刷新报错adapter.notifyDataSetChanged()解决
  11. TCP转输控制协议(转)
  12. Linux中变量$#,$@,$0,$1,$2,$*,$$,$?的含义
  13. 编写可维护的javascript代码---开篇(介绍自动报错的插件)
  14. from表单requried属性效果
  15. Cisco Packet Tracer 思科命令缩写
  16. DSPTMS320C6678的数据导入方法
  17. 弗吉尼亚理工大学计算机科学,美国弗吉尼亚理工大学计算机科学本科.pdf
  18. 何为企业?何以“大而能用,大而有当”?|一点财经
  19. vmware虚拟机和云服务器区别,容器云与虚拟机云区别
  20. 微信小程序 首次进入加载引导页

热门文章

  1. xbox手柄适配器驱动_用于Windows的Xbox 360控制器无线接收器适配器
  2. 访问本地环境时出现The requested URL / was not found on this server.
  3. 梯度提升(Gradient Boosting)算法
  4. 《增长黑客》- 读书笔记(一)
  5. 将整数翻译成英文(C++)
  6. 【Bootstrap】选择折叠项collapse
  7. 3DMax2014试用结束后激活教程
  8. 最GIS应用案例——告诉你什么是GIS!
  9. miniprogram-ci官方文档
  10. impress.js css模板,使用impress.js制作幻灯片