ListView与适配器的一起使用
2016-02-21 23:05
369 查看
ListView与适配器的一起使用:
(1)与ArrayAdapter使用:
(2)与SimpleAdapter使用:图文混排
(3)与BaseAdpter一起使用:自定义适配器
(1)与ArrayAdapter使用:
数据源为String[] 或者是List<String> 1)动态定义数据源在res-values下,新建XML,<string-array name=""></string-array>,通过R.array.name找到 例子:<string-array name="userName"> <item >小红</item> <item >小花</item> <item >小小</item> </string-array> 2)得到数据源:getResources().getStringArray(R.array.userName); 3)创建ArrayAdapter适配器 /** * 第一个参数:上下文(访问系统资源) * 第二个参数:item布局文件id * 布局文件可以自定义,系统自带的为android.R.layout.simple_list_item_1 * 第三个参数:数据源 * */ ArrayAdapter(Context上下文,resourceId Item的布局文件id,数据源String[]/List<String>) ListView.setAdapter(adapter); ListView使用: 在XML中写控件 在java代码中初始化: private ListView listView; listView = (ListView) findViewById(R.id.listview); setEmptyView():方法,自动匹配当没有数据的时候,显示无数据 使用:在XML中定义TextView,text="暂无数据" 在将要显示信息的地方 .setEmptyView(textview);
(2)与SimpleAdapter使用:图文混排
数据源为List<Map<String,Object>> 1)动态创建数据源在values下,为一组数据;所以形式为: <string-array name=""> <item>aa</item> </string-array> <string-array name=""> <item>aa</item> </string-array> ......多组 2)得到数据源: getIdentifier:获取某一资源类型的id,通过资源的实际名称(资源名称与XML中名称一致) 例子:获得图片 /** * getIdentifier:类似于R.drawable.a/R.String.app_name * 第一个参数:图标的实际名称 * 第二个参数:资源类型 * 第三个参数:包名 * */ int id = getResources().getIdentifier(userImage[i], "drawable", getPackageName()); 将数据添加到map中,添加到List中 例子:获得文字: 3)创建SimpleAdapter: SimpleAdapter(Context上下文,数据源List<Map<String,Object>>,resourceId Item的布局文件id, String[]一组Map中键的数组,一组item布局文件中UI控件id的数组); SimpleAdapter adapter = new SimpleAdapter(this, totalList, R.layout.item_listview_main, new String[]{"userImage","userName","userNum"}, new int[]{R.id.userimage,R.id.username,R.id.usernum}); ListView.setAdapter(adapter);
(3)与BaseAdpter一起使用:自定义适配器
数据源类型根据情况自定义,可以是String[]/List<Map<String,Object>> 1)在XML下建立视图 2)写一个类继承BaseAdapter,重写四个方法:例子: 定义Activity,private Activity activity; 通过构造函数传值将activity传入 3)在Activity中new类,将上下文对象传入 重写的方法: // 返回ListView里面Item的数量,实质上是数据源的长度 @Override public int getCount() { // TODO Auto-generated method stub return list.size(); } // 返回每一个item中映射的数据,也就是数据源的子元素,所传参数是点击Item的位置 @Override public Object getItem(int position) { // TODO Auto-generated method stub return list.get(position); } //返回id @Override public long getItemId(int position) { // TODO Auto-generated method stub return position; } //返回每一个Item的视图 ,根据getCount决定getView 运行多少次 /* 第一个参数:position,每一个item的位置 * 第二个参数: * 第三个参数:item的父视图 */ @Override public View getView(int position, View convertView, ViewGroup parent) { // 通过一个Layout填充器,来将listview_main填充,并返回View View view = activity.getLayoutInflater().inflate(R.layout.listview_main, parent, false); // 找数据 ImageView image = (ImageView) view.findViewById(R.id.userImage); TextView name = (TextView) view.findViewById(R.id.userName); TextView num = (TextView) view.findViewById(R.id.userNum); // 设置数据 int resId = (int) list.get(position).get("userImage"); image.setImageResource(resId); name.setText((String) list.get(position).get("userName")); String numText = (String) list.get(position).get("userNum"); num.setText(numText); return view; }
相关文章推荐
- 从头认识Spring-3.2 简单的AOP日志实现-需要记录方法的运行时间
- springIOC
- Javascript数据类型
- Sublime Text编辑器使用技巧
- cct软件测试
- cct软件测试
- ListView优化
- PHP之访问修饰符
- PHP动态编译时报错
- 基于OpenWrt的PPTP插件适配Bootstrap
- ListView分页
- cct,web技术
- cct,web技术
- MySQL分表、分区
- Sublime text 3 中Package Control 的安装与使用方法(转自 http://devework.com/sublime-text-3-package-control.html)
- 设计模式(2)---策略模式
- Android适配器
- 音视频的几个基本概念
- 单例模式
- ListActivity