ListView的用法

ListView的家族比较庞大,这个类是用于创建列表的。
先介绍一下ListView的兄弟姐妹:
ListView的父亲是AbsListView抽象类,
AbsListView的父亲是AdaperView抽象类
AdaperView的父亲是ViewGroup抽象类
AdaperView的子类分为两层,
第一层是抽象类AbsListView,AbsSpinner,AdapterViewAnimator
第二层实现了第一层的抽象类的类:ListView,GridView,Spinner,Gallery,AdapterViewFlipper,StackView

以下几种方法可以创建列表项组件

1. 直接在layout布局文件中创建ListView,步骤如下:

1.在布局文件中添加组件(属性:entries条目,divider分隔条)
2.在value文件中创建资源文件(字符串数组resources,string-array,item标签)
方法简单,因为是单独用一整个ListView组件创建的,所以不能定制每个列表项的字体大小,颜色,不能定制外观。

/*********res\layout\main_layout.xml文件**************/
<ListView>
entries="@array/books"			//条目属性对应的是value下的resource根元素下<string-array>元素,不要忘了加name属性,这里是name="books"。元素项为<item>
divider = "#f00"
dividerHeight="2px"
</ListView>

/********res\value\item1.xml文件*********/
<?xml version="1.0" encoding="utf-8" ?>
<resources>
	<string-array name="books">
		<item>列表项一</item>
		<tem>列表项二</item>
	</string-array>
</resources>

2. 通过继承LIstActivity创建列表

适合让窗口仅仅显示一个列表的情况,比较简单,共4个步骤。
1.主类继承ListActivity(这个类在API中继承了Activity类)
2.创建字符串数组,存储列表项内容。
3.创建ArrayAdapter。(参数3个,内容环境,引用布局文件ID,存储列表项内容的数组)
4.在容器中添加数组列表适配器

public class ListActivityTest extends ListActivity{			//继承ListActivity
	public void onCreate(Bundle savedInstanceState){
		super.onCreate(savedInstanceState);
		String[] arr = { "列表项1" , "列表项2" };
		ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,R.layout.test_layout.xml,arr);
		this.setListAdapter(adapter);
	}
}

3. 通过ArrayAdapter(数组列表适配器)创建列表组件,比较简单,大致分6步骤:

1.在主布局文件中创建ListView组件(属性:ID,分隔条)
2.依托其他UI组件,创建列表项(创建本组件属性等于创建列表项属性)的相关属性(ID,文本大小,外边距,阴影颜色shadowColor,xy位移,阴影类型)
3.在主程序中创建ListView组件并根据id返回布局文件中ListView组件对象
4.定义一个包含列表项内容的字符串数组。
5.创建数组列表适配器ArrayAdapter<(3个属性,内容环境,外部组件的文件引用ID,列表项内容的数组)
6.为3步骤的列表设置适配器setAdapter.

4.使用表面简单,但其实不简单的SimpleAdapter创建列表,大致分7个步骤:

1.主layout布局文件中创建ListView组件(属性:ID)
2.创建为了布局和自定义美化而单独设置的布局文件,布局内容应该提前对列表项的布局UI提前准备好。(属性:每个要绘制组件的ID,左外边距dp,字体dp,字体颜色,)
3.创建列表项需要的内容,可以使字符串数组,也可以是整型数组(包含引用资源ID)
4.创建List集合,List下的集合包含一对键-值(因为可以根据哪个键,生成或者不生成哪个列表项,该保存的还是要保存(妈妈做成饭了,就看你爱吃不吃了!),和下面步骤有联系)

List < Map <String , Object>  > testList_JH = new ArrayList< Map < String, Object> >;

5.迭代(可用for循环,i<列表项内容字符串数组长度),用来迭代列表项内容,先添加到Map集合中去,分为3个小步骤:

  • 1.创建Map集合,并使用哈希Map构造集合对象。
Map<String , Object> map_JH = new HashMap<String , Object>;
  • *2.放置数据到创建的Map集合中(方法为put(键,值))
    map_JH.put (“name”,names[i]);
    map_JH.put(“phone”,phone_number[i]);
    map_JH.put(“head_portrit”,touXiang[i]);
    参数分别为键 和 列表项的内容以及引用资源,关于键的名字只需要和创建SimpleAdapter的倒数第二个参数匹配就OK了,因为在这里是写入Map中键的内容,在创建SimpleAdapter的构造函数时就不同了,它会审核,查验哪些键不匹配就不生成哪些列表项。

  • 3.在List集合中添加“对键值完事儿的Map”
    testList_JH.add(map_JH);
    此处for循环集合与列表项数据的操作已完成,接下来就是创建“简单列表适配器”
    *

6. 创建“简单列表适配器”SimpleAdapter并直接构造初始化对象(5个参数:内容环境,存储列表项内容的List集合,为了单独地布局列表项的layout布局文件ID,字符串数组String [],整型数组int [])
字符串数组和列表项内的组件ID整型数组可以在创建SimpleAdapter前提前准备(如果不需要考虑内存占用的话)
倒数第二个参数上面步骤已经提及:如果和键不匹配,SimpleAdapter就不会给你生成列表项。
倒数第二个参数:就算给你生成了列表项,生成的也只是空列表项,因为不让simpleAdapter认识要绘制列表项里的哪些组件?不告诉适配器它叫TextView?还是叫ImageView,适配器是不会给绘制填充的。
7.为主布局文件中的ListView设置适配器为simpleAdapter(记得findVIewById返回后ListView对象后操作)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值