Android数据展示之ListView
Android应用程序中经常需要使用ListView展示数据,一个ListView通常将数据填充到布局文件中,在填充的过程中需要知道连接数据与ListView的适配器。适配器是一个连接数据和AdapterView(ListView是一个典型的AdapterView)的桥梁,通过它能有效地实现数据与AdapterView的分离设置,使AdapterView与数据的绑定更加简便,修改更加方便。常用的适配器有三种ArrayAdapter,SimpleAdapter和BaseAdapter。
ArrayAdapter实现ListView
用ArrayAdapter可以实现简单的ListView的数据绑定。默认情况下,ArrayAdapter绑定每个对象的toString值到layout中预先定义的TextView控件上。ArrayAdapter的使用非常简单。
在布局文件中新增一个ListView
<ListView
android:id="@+id/list_Test"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
activity中代码的实现,获取ListView没什么好说的,主要是setAdapter方法,第二个参数就是Android系统中内置布局文件,如果是android.R.layout.simple_list_item_1,就直接是一行文字,我只列举了三个,其他的可以自行测试:
String[] listArrStrings=new String[]{"星期一","星期二","星期三"};
listView=(ListView) findViewById(R.id.list_Test); listView.setAdapter(new ArrayAdapter<String>(this,android.R.layout.simple_list_item_single_choice, listArrStrings));
listView.setChoiceMode(ListView.CHOICE_MODE_SINGLE); listView.setOnItemClickListener(new OnItemClickListener() { @Override
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
// TODO Auto-generated method stub
String nameString=(String) parent.getItemAtPosition(position);
setTitle("今天是:"+nameString); }
实现结果如下:
重新改变一下代码,改变一下填充的默认的系统的布局文件,可以设置单选还是多选:
listView.setAdapter(new ArrayAdapter<String>(this,android.R.layout.simple_list_item_checked, listArrStrings));
listView.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE); listView.setAdapter(new ArrayAdapter<String>(this,android.R.layout.simple_list_item_checked, listArrStrings));
listView.setChoiceMode(ListView.CHOICE_MODE_SINGLE);
效果如下:
SimpleAdapter实现ListView
这次先来看下要实现的效果:
ListView中每个View布局都一样,这个时候需要首先新建一个布局文件simpleitem.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="wrap_content"
android:orientation="horizontal" > <ImageView
android:id="@+id/itemImage"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:src="@drawable/ic_launcher" /> <LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:paddingLeft="10dp"> <TextView
android:id="@+id/itemTitle"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="标题"
android:textSize="25sp" /> <TextView
android:id="@+id/itemText"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="xxxxxxxxx" />
</LinearLayout> </LinearLayout>
这个时候代码调用也很简单,跟ArrayAdapter类似,SimpleAdapter,最后两个参数,一个是map中的键,一个对应的simpleitem中的id:
ListView listView=(ListView) findViewById(R.id.list_simple);
ArrayList<HashMap<String, String>> arrayList=new ArrayList<HashMap<String,String>>();
for (int i = 0; i <10; i++) {
HashMap<String, String> map=new HashMap<String, String>();
map.put("itemTitle", "标题"+i);
map.put("itemText", "内容"+i);
arrayList.add(map);
} SimpleAdapter simpleAdapter=new SimpleAdapter(this, arrayList, R.layout.simpleitem, new String[]{"itemTitle","itemText"},new
int[]{R.id.itemTitle,R.id.itemText});
listView.setAdapter(simpleAdapter);
BaseAdapter实现ListView
BaseAdapter可扩展性,可以再View中加入自己定义的一些操作事件,使用的时候需要实现BaseAdapter类,定义一个自己的类;
class MyBaseAdapter extends BaseAdapter { // 定义List的长度
@Override
public int getCount() {
// TODO Auto-generated method stub
return 100;
} @Override
public Object getItem(int position) {
// TODO Auto-generated method stub
return null;
} @Override
public long getItemId(int position) {
// TODO Auto-generated method stub
return 30;
} @Override
public View getView(int position, View convertView, ViewGroup parent) {
// TODO Auto-generated method stub
TextView textView = new TextView(BaseActivity.this);
textView.setText("测试");
textView.setTextColor(Color.BLUE);
textView.setTextSize(20);
return textView; }
}
Activity中调用代码:
ListView listView = (ListView) findViewById(R.id.list_base);
listView.setAdapter(new MyBaseAdapter());
上面其实用BaseAdapter实现了ArrayAdapter的功能,同样的可以使用BaseAdapter实现SimpleAdapter的功能:
还是同样的调用simplte这个布局,重写一下getView()方法:
View view = null;
if (convertView == null) {
LayoutInflater inflater = BaseActivity.this.getLayoutInflater();
view = inflater.inflate(R.layout.simpleitem, null);
}else{
view=convertView;
}
TextView tvTitleTextView=(TextView) view.findViewById(R.id.itemTitle);
TextView tvTextView=(TextView) view.findViewById(R.id.itemText);
tvTitleTextView.setTextSize(20);
tvTitleTextView.setText("标题---"+position);
tvTitleTextView.setTextColor(Color.RED);
tvTextView.setTextSize(15);
tvTextView.setText("内容----"+position);
return view;
效果如下:
十一点了,该睡觉了,程序员还是不要熬夜的比较好~
Android数据展示之ListView的更多相关文章
- C#-WinForm-ListView-表格式展示数据、如何将数据库中的数据展示到ListView中、如何对选中的项进行修改
在展示数据库中不知道数量的数据时怎么展示最好呢?--表格 ListView - 表格形式展示数据 ListView 常用属性 HeaderStyle - "详细信息"视图中列标头的 ...
- Android Scrollview嵌套下listView动态加载数据,解决onScrollChanged执行多次数据重复问题
这一篇博客和上一篇讲的都是listView的动态加载,但有所不同的是,本篇的listView是嵌套在ScrollView下的,有时候在一个Activity中可能分为好几个模块,由于展示的需要(手机屏幕 ...
- Xamarin使用ListView开启分组视图Cell数据展示bug处理
问题描述 Xamarin使用IsGroupingEnabled="true"之后再Cell操作就会出现数据展示bug,数据不刷新的问题,如下图所示: 点击取消的是其他钢厂,但Vie ...
- android 在自定义的listview(有刷新加载项)列表中,数据过少时不能铺满整个屏幕时,header和footer同时显示问题
android 在自定义的listview(有刷新加载项)列表中,数据过少时,当刷新时,加载项也会显示,这是很头疼的一个问题,查阅了一些资料,总结了一个比较不错的方法: 原来代码: @Overrid ...
- 黎活明8天快速掌握android视频教程--19_采用ListView实现数据列表显示
1.首先整个程序也是采用mvc的框架 DbOpenHelper 类 package dB; import android.content.Context; import android.databas ...
- Android 自定义Adapter 但listview 只显示第一条数据
<ScrollView android:layout_width="fill_parent" android:layout_height="wrap_content ...
- Android:控件ListView列表项与适配器结合使用
Listview是用来展示一些重复性的数据用的,比如一些列表集合数据展示到手机,需要适配器作为载体获取数据,最后将数据填充到布局. ListView里面的每个子项Item可以使一个字符串,也可以是一个 ...
- Android开发系列之ListView
上篇博客解决了Android客户端通过WebService与服务器端程序进行交互的问题,这篇博客重点关注两个问题,一个是Android应用程序如何与本机文件型数据库SQLite进行交互,另一问题则是如 ...
- Android控件开发——ListView
上篇博客解决了Android客户端通过WebService与服务器端程序进行交互的问题,这篇博客重点关注两个问题,一个是Android应用程序如何与本机文件型数据库SQLite进行交互,另一问题则是如 ...
随机推荐
- qt study2
- 2018年全国多校算法寒假训练营练习比赛(第二场)F - 德玛西亚万岁
链接:https://www.nowcoder.com/acm/contest/74/F来源:牛客网 题目描述 德玛西亚是一个实力雄厚.奉公守法的国家,有着功勋卓著的光荣军史. 这里非常重视正义.荣耀 ...
- 洛谷P1527 [国家集训队] 矩阵乘法 [整体二分,二维树状数组]
题目传送门 矩阵乘法 题目描述 给你一个N*N的矩阵,不用算矩阵乘法,但是每次询问一个子矩形的第K小数. 输入输出格式 输入格式: 第一行两个数N,Q,表示矩阵大小和询问组数: 接下来N行N列一共N* ...
- 海康威视 - 萤石云开放平台 js 版
开放平台 https://open.ys7.com/mobile/download.html API http://open.ys7.com/doc/zh/uikit/uikit_javascript ...
- Logan:美团点评的开源移动端基础日志库
前言 Logan是美团点评集团移动端基础日志组件,这个名称是Log和An的组合,代表个体日志服务.同时Logan也是“金刚狼”大叔的名号,当然我们更希望这个产品能像金刚狼大叔一样犀利. Logan已经 ...
- JAVA 获取分行符
public static final String CR_LF = System.getProperty("os.name").startsWith("Windows& ...
- 使用DNSPod域名解析
1 在GoDaddy域名注册商 注册域名 https://sg.godaddy.com/zh/ 2 登陆DNSPod https://www.dnspod.cn 3 选择域名解析 添加域名 4 添加记 ...
- OpenContrail 体系
OpenContrail 体系架构文档 1 概述1.1 使用案例1.2 OpenContrail控制器和vRouter1.3 虚拟网络1.4 Overlay Networking1.5 ...
- [ 转载 ] Java Jvm内存介绍
一.基础理论知识 1.java虚拟机的生命周期: Java虚拟机的生命周期 一个运行中的Java虚拟机有着一个清晰的任务:执行Java程序.程序开始执行时他才运行,程序结束时他就停止.你在同一台机器上 ...
- C# NPOCO 轻量级ORM框架(入门)
目前公司使用这个框架,搜不到很详细的中文资料. 只有英文wiki,所以翻译学习一下. 因为博主也是低水平的,可能会有一些理解不到位的地方. 可能会有错误的地方,如果有园友发现可以指出. wiki地址: ...