博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Android开发六:常用控件3--ListView(一)
阅读量:4596 次
发布时间:2019-06-09

本文共 6935 字,大约阅读时间需要 23 分钟。

今天接着学习控件,要学的是安卓里面的ListView。ListView在安卓中大家见得最多的地方是设置菜单,打开程序列表,点设置,我们看到的就是一个ListView。

ListView比前几节学习的东西要麻烦一些,这里分成两篇文章来详细讲解。

首先ListView要显示数据他需要绑定到数据源上,绑定数据需要用到适配器(Adapter),常用到的Adapter有ArrayAdapter、SimpleAdapter、BaseAdapter。今天先来学习用前两种来绑定数据。

首先学习ArrayAdapter,用ArrayAdapter可以实现简单的ListView的数据绑定,默认情况下,ArrayAdapter绑定每个对象的toString值到layout中预先定义的TextView控件。

我要实现的功能是用ListView显示几个网站的名称,点击的时候可以打开相应的网站。

布局文件很简单,只有一个ListView:

1 
2
6 7
11
12 13

下面在的程序里面实现功能,先定义两个数组,第一个是网站的名称,第二个是网站的网址,两个数组里的数据相对应。

final String[] strings=new String[]{"百度","新浪","腾讯","网易"}; final String[] stringurl=new String[]{"http://www.baidu.com/","http://www.sina.com.cn/","http://www.qq.com/","http://www.163.com/"};

然后获取到ListView对象,绑定数据

1 ListView lv=(ListView)findViewById(R.id.listView1); 2         ArrayAdapter
adapter=new ArrayAdapter
(ListView_ArrayAdapterActivity.this, android.R.layout.simple_list_item_1, strings); 3 lv.setAdapter(adapter);

ArrayAdapter的构造方法用的是public ArrayAdapter(android.content.Context context, int textViewResourceId, java.lang.Object[] objects);第一个参数是当前上下文,第二个参数是TextView的id,第三个是要绑定的数据。这里详细说明下第二个参数,这个参数可以是自定义的一个layout,但是这个layout里面必须要有一个TextView控件。这里我们使用的是android提供的一个资源。

到这里绑定数据就结束了,还要实现每一个项被点击的时候能跳转到相应的网站,为ListView的项添加事件,用到的是public void setOnItemClickListener(android.widget.AdapterView.OnItemClickListener listener);如下

lv.setOnItemClickListener(new OnItemClickListener() {
public void onItemClick(AdapterView
arg0, View arg1, int arg2,long arg3) {
Intent intent=new Intent(Intent.ACTION_VIEW, Uri.parse(stringurl[arg2])); startActivity(intent); } });

这段代码处理了ListView的onItemClick事件,用intent调用打开网页的程序,到这里全部功能就实现了。下面贴上完整代码

1 package com.yyj.ListView_ArrayAdapter;  2  3 import android.app.Activity;  4 import android.content.Intent;  5 import android.net.Uri;  6 import android.os.Bundle;  7 import android.view.View;  8 import android.widget.AdapterView;  9 import android.widget.AdapterView.OnItemClickListener; 10 import android.widget.ArrayAdapter; 11 import android.widget.ListView; 12 13 public class ListView_ArrayAdapterActivity extends Activity {
14 final String[] strings=new String[]{"百度","新浪","腾讯","网易"}; 15 final String[] stringurl=new String[]{"http://www.baidu.com/","http://www.sina.com.cn/","http://www.qq.com/","http://www.163.com/"}; 16 /** Called when the activity is first created. */ 17 @Override 18 public void onCreate(Bundle savedInstanceState) {
19 super.onCreate(savedInstanceState); 20 setContentView(R.layout.main); 21 setTitle("打开网页"); 22 23 ListView lv=(ListView)findViewById(R.id.listView1); 24 ArrayAdapter
adapter=new ArrayAdapter
(ListView_ArrayAdapterActivity.this, android.R.layout.simple_list_item_1, strings); 25 lv.setAdapter(adapter); 26 27 lv.setOnItemClickListener(new OnItemClickListener() {
28 29 public void onItemClick(AdapterView
arg0, View arg1, int arg2,long arg3) {
30 Intent intent=new Intent(Intent.ACTION_VIEW, Uri.parse(stringurl[arg2])); 31 startActivity(intent); 32 } 33 }); 34 } 35 }

效果如图

点击腾讯以后

附上源代码

下面讲解用SimpleAdapter来为ListView绑定数据,这个可以实现复杂一些的功能,除了文字,使用它还可以绑定图片,多选框等。

我们来用它实现一个类似于应用程序列表里面的设置的界面。

用SimpleAdapter来为ListView绑定数据,比用ArrayAdapter稍微复杂。我们除了要有一个main.xml,还要在layout里面在新建另一个xml文件来作为ListView的每一项。

main.xml和上一个用的完全一样,不在贴代码,下面来看我新建的item.xml

1 
2
7 8
13 14
19

这个很容易理解,建立一个横向排列的LinearLayout布局,在里面放上一个ImageView控件和一个TextView控件。ImageView以前没讲过,就是一个显示图片的控件,相当于html里面的img,不再赘述。

然后在程序里面取得main.xml里面定义的ListView控件,用一个ArrayList来盛放数据

1         ListView lv=(ListView)findViewById(R.id.listView1);  2         ArrayList
> alist=new ArrayList
>(); 3 4 HashMap
hMap=new HashMap
(); 5 hMap.put("itempic", android.R.drawable.sym_action_call); 6 hMap.put("itemtext", "通话设置"); 7 alist.add(hMap); 8 HashMap
hMap2=new HashMap
(); 9 hMap2.put("itempic", android.R.drawable.ic_lock_silent_mode_off); 10 hMap2.put("itemtext", "声音"); 11 alist.add(hMap2); 12 HashMap
hMap3=new HashMap
(); 13 hMap3.put("itempic", android.R.drawable.stat_notify_sdcard); 14 hMap3.put("itemtext", "SD卡和手机内存"); 15 alist.add(hMap3); 16 HashMap
hMap4=new HashMap
(); 17 hMap4.put("itempic", android.R.drawable.ic_menu_info_details); 18 hMap4.put("itemtext", "关于手机"); 19 alist.add(hMap4);

我添加了我的手机设置里面的四项。里面的android.R.drawable.xxx是android系统内置的资源,因为有的找不全对应的图片,所以只是写了四项。然后就是绑定数据部分了。

SimpleAdapter adapter=new SimpleAdapter(ListView_SimpleAdapterActivity.this,alist, R.layout.item, new String[]{"itempic","itemtext"},new int[]{R.id.ivpic,R.id.tvtext});         lv.setAdapter(adapter);

SimpleAdapter构造方法里面的参数分别是 上下文、绑定的数据、每一行的布局文件(这里是item.xml),后面是一个String数组和一个int数组,这两个数组里面的内容相对应,就是把ArrayList里面的HashMap里面的值放到item.xml里面相应的控件里面。额。。。有点绕,最后在调用LIstView的setAdapter方法绑定数据。这个过程也就完成了,然后如果要给每一行添加事件的话,就和上面的ArrayAdapter绑定数据是一样的了。

完整的代码是

1 package com.yyj.ListView_SimpleAdapter;  2  3 import java.util.ArrayList;  4 import java.util.HashMap;  5  6 import android.app.Activity;  7 import android.os.Bundle;  8 import android.widget.ListView;  9 import android.widget.SimpleAdapter; 10 11 public class ListView_SimpleAdapterActivity extends Activity {
12 /** Called when the activity is first created. */ 13 @Override 14 public void onCreate(Bundle savedInstanceState) {
15 super.onCreate(savedInstanceState); 16 setContentView(R.layout.main); 17 setTitle("设置"); 18 19 ListView lv=(ListView)findViewById(R.id.listView1); 20 ArrayList
> alist=new ArrayList
>(); 21 22 HashMap
hMap=new HashMap
(); 23 hMap.put("itempic", android.R.drawable.sym_action_call); 24 hMap.put("itemtext", "通话设置"); 25 alist.add(hMap); 26 HashMap
hMap2=new HashMap
(); 27 hMap2.put("itempic", android.R.drawable.ic_lock_silent_mode_off); 28 hMap2.put("itemtext", "声音"); 29 alist.add(hMap2); 30 HashMap
hMap3=new HashMap
(); 31 hMap3.put("itempic", android.R.drawable.stat_notify_sdcard); 32 hMap3.put("itemtext", "SD卡和手机内存"); 33 alist.add(hMap3); 34 HashMap
hMap4=new HashMap
(); 35 hMap4.put("itempic", android.R.drawable.ic_menu_info_details); 36 hMap4.put("itemtext", "关于手机"); 37 alist.add(hMap4); 38 39 SimpleAdapter adapter=new SimpleAdapter(ListView_SimpleAdapterActivity.this, 40 alist, R.layout.item, new String[]{"itempic","itemtext"},new int[]{R.id.ivpic,R.id.tvtext}); 41 lv.setAdapter(adapter); 42 } 43 }

附上程序截图,(有点难看...)

最后再附上源代码:

转载于:https://www.cnblogs.com/tianyi-yyj/archive/2012/02/24/2367312.html

你可能感兴趣的文章
JavaScript对象
查看>>
IIS7(Windows7)下最简单最强安装多版本PHP支持环境
查看>>
关于Cocos2d-x发布游戏的时候遇到的问题和解决
查看>>
CSS学习笔记之样式声明
查看>>
rtmpdump代码分析 转
查看>>
codeforces #322 div 2 D. Three Logos (枚举)
查看>>
20145202马超《JAVA》预备作业1
查看>>
[导入]参考OpenSceneGraph的3ds插件学习lib3ds
查看>>
java基础-四大特征
查看>>
linux文档查看器
查看>>
如何使用 ccs7.2调试代码
查看>>
2016.8.22 Axure两级下拉框联动的实现
查看>>
C#集合类:动态数组、队列、栈、哈希表、字典(转)
查看>>
基于bootstrap 的datatable插件的使用(php版)
查看>>
展示图片的自动和手动切换
查看>>
机器学习分类
查看>>
kvm虚拟化关闭虚拟网卡virbr0的方法
查看>>
课后作业1
查看>>
深入HashMap
查看>>
JavaScript中模块化工具require.js
查看>>