Android控件之ListView的使用
ListView是Android当中一个非常常用的数据显示控件。
第一种可以使用List<HashMap<String , Object>>,作为适配器的数据源来显示要显示的数据。
XML布局文件之item.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" > <TextView
android:id="@+id/itemTitle"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:textSize="20dip" >
</TextView> <TextView
android:id="@+id/itemText"
android:layout_width="fill_parent"
android:layout_height="wrap_content" >
</TextView> </LinearLayout>
XML布局文件之activity_main.xml:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".MainActivity" > <ListView android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/MyListView">
</ListView> </RelativeLayout>
JAVA源代码:
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List; import android.os.Bundle;
import android.app.Activity;
import android.widget.ListView;
import android.widget.SimpleAdapter; public class MainActivity extends Activity { private ListView listView = null; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
listView = (ListView) this.findViewById(R.id.MyListView);
//组织数据源
List<HashMap<String , String>> myList = new ArrayList<HashMap<String,String>>();
for(int i=0; i<10; i++){
HashMap<String , String> map = new HashMap<String, String>();
map.put("itemTitle", "这是一个标题");
map.put("itemText", "这是一个内容");
myList.add(map);
}
//新建i适配器把数据源加入适配器
SimpleAdapter simpleAdapter = new SimpleAdapter(this
, myList
, R.layout.item
, new String[] { "itemTitle" , "itemText" }
, new int[] { R.id.itemTitle , R.id.itemText});
//给list添加适配器
listView.setAdapter(simpleAdapter);
} }
界面显示:

第二种可以自定义一个Adapter类。只要写一个类继承ArrayAdapter,然后实现它的构造函数XXAdapter(Context context, int resource , List objects)和 重写它的
getCount(),getItem(int position),getItemId(int position),getView(int position, View convertView, ViewGroup parent) 等方法即可。
XML布局文件之activity_main.xml:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".MainActivity" > <TextView
android:id="@+id/id"
android:layout_width="100dip"
android:layout_height="wrap_content"
android:layout_marginLeft="30dip"
android:textSize="20dip" /> <TextView
android:id="@+id/name"
android:layout_width="100dip"
android:layout_height="wrap_content"
android:layout_alignTop="@id/id"
android:layout_toRightOf="@id/id"
android:textSize="20dip" /> <TextView
android:id="@+id/age"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignTop="@id/name"
android:layout_toRightOf="@id/name"
android:textSize="20dip" /> </RelativeLayout>
JAVA源代码之Person.java
public class Person {
    private String id;
    private String name;
    private String age;
    public Person(String id, String name, String age) {
        super();
        this.id = id;
        this.name = name;
        this.age = age;
    }
    public String getId() {
        return id;
    }
    public void setId(String id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getAge() {
        return age;
    }
    public void setAge(String age) {
        this.age = age;
    }
}
JAVA源代码之PersonAdapter.java
import java.util.List; import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.TextView; public class PersonAdapter extends ArrayAdapter { private LayoutInflater layoutInflater = null;
private List<Person> persons; public PersonAdapter(Context context, int resource , List objects) {
super(context, resource);
layoutInflater = LayoutInflater.from(context);
persons = objects;
} /**
* 获取adapter里有多少个数据项
*/
@Override
public int getCount() {
return persons.size();
} @Override
public Object getItem(int position) {
return persons.get(position);
} @Override
public long getItemId(int position) {
return position;
} /**
* 创建显示的数据界面
* Adapter的作用就是ListView界面与数据之间的桥梁
* 当列表里的每一项显示到页面时,都会调用Adapter的getView方法返回一个View
*/
@Override
public View getView(int position, View convertView, ViewGroup parent) {
//优化后
ViewHolder holder;
if(convertView == null){
convertView = layoutInflater.inflate(R.layout.activity_main, null);
holder = new ViewHolder();
holder.id = (TextView)convertView.findViewById(R.id.id);
holder.name = (TextView)convertView.findViewById(R.id.name);
holder.age = (TextView)convertView.findViewById(R.id.age);
convertView.setTag(holder);
}else{
holder = (ViewHolder)convertView.getTag();
}
holder.id.setText(persons.get(position).getId());
holder.name.setText(persons.get(position).getName());
holder.age.setText(persons.get(position).getAge());
return convertView;
} private static class ViewHolder{
private TextView id;
private TextView name;
private TextView age;
} }
JAVA源代码之MainActivity.java
import java.util.ArrayList;
import android.os.Bundle;
import android.app.ListActivity;
import android.view.View;
import android.widget.ListView;
import android.widget.Toast; public class MainActivity extends ListActivity { private ArrayList<Person> persons = new ArrayList<Person>();
private PersonAdapter personAdapter = null; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
initData();
/**
* 第一个参数:当前类的对象
* 第二个参数:布局文件
* 第三个参数:数据源(这里主要是实体对象的数据源)
*/
personAdapter = new PersonAdapter(MainActivity.this,
R.layout.activity_main, persons);
setListAdapter(personAdapter);
registerForContextMenu(getListView());
} @Override
protected void onListItemClick(ListView listView, View view, int position,
long id) {
super.onListItemClick(listView, view, position, id);
Person person = persons.get(position);
Toast.makeText(
MainActivity.this,
person.getId() + ":" + person.getName() + ":" + person.getAge(),
Toast.LENGTH_LONG).show();
return;
}
/**
* 初始化数据源
* 在PersonAdapter里会对布局文件和这里的数据源进行绑定
*/
private void initData() {
persons.add(new Person("序号", "姓名", "年龄"));
persons.add(new Person("1", "chen1", "23"));
persons.add(new Person("2", "chen2", "23"));
persons.add(new Person("3", "chen3", "23"));
persons.add(new Person("4", "chen4", "23"));
persons.add(new Person("5", "chen5", "23"));
persons.add(new Person("6", "chen6", "23"));
} }
界面显示:

Android控件之ListView的使用的更多相关文章
- Android控件开发——ListView
		
上篇博客解决了Android客户端通过WebService与服务器端程序进行交互的问题,这篇博客重点关注两个问题,一个是Android应用程序如何与本机文件型数据库SQLite进行交互,另一问题则是如 ...
 - [Android Pro]   android控件ListView顶部或者底部也显示分割线
		
reference to : http://blog.csdn.net/lovexieyuan520/article/details/50846569 在默认的Android控件ListView在 ...
 - UIAutomator定位Android控件的方法
		
UIAutomator各种控件定位的方法. 1. 背景 使用SDK自带的NotePad应用,尝试去获得在NotesList那个Activity里的Menu Options上面的那个Add note菜单 ...
 - Robotium之Android控件定位实践和建议(Appium/UIAutomator姊妹篇)
		
本人之前以前撰文描写叙述Appium和UIAutomator框架是怎样定位Android界面上的控件的. UIAutomator定位Android控件的方法实践和建议 Appium基于安卓的各种Fin ...
 - 【转】UIAutomator定位Android控件的方法实践和建议(Appium姊妹篇)
		
原文地址:http://blog.csdn.net/zhubaitian/article/details/39777951 在本人之前的一篇文章<<Appium基于安卓的各种FindEle ...
 - UIAutomator定位Android控件的方法实践和建议(Appium姊妹篇)
		
在本人之前的一篇文章<<Appium基于安卓的各种FindElement的控件定位方法实践和建议>>第二章节谈到Appium可以通过使用UIAutomator的方法去定位And ...
 - Android控件GridView之仿支付宝钱包首页带有分割线的GridView九宫格的完美实现
		
Android控件GridView之仿支付宝钱包首页带有分割线的GridView九宫格的完美实现 2015-03-10 22:38 28419人阅读 评论(17) 收藏 举报 分类: Android ...
 - Android控件介绍
		
1. 介绍 Android控件大多位于android.widget, android.view.View为他们的父类对于Dialog系列, android.app.Dialog为父类 Android的 ...
 - Robotium之Android控件定位实践和建议
		
本人之前曾经撰文描述Appium和UIAutomator框架是如何定位Android界面上的控件的. UIAutomator定位Android控件的方法实践和建议Appium基于安卓的各种FindEl ...
 
随机推荐
- memcached整理の分布式集群算法
			
memcached如何实现分布式? memcached是一个“分布式内存对象缓存系统”,然而memcached并不像mongodb那样,允许配置多个节点,且节点之间“自动分配数据”,就是说memcac ...
 - 20145218张晓涵 web安全基础实践
			
20145218张晓涵 web安全基础实践 1.实验后回答问题 SQL注入攻击原理,如何防御 SQL注入漏洞是指在Web应用对后台数据库查询语句处理存在的安全漏洞.也就是,在输入字符串中嵌入SQL指令 ...
 - ASP.NET MVC 缓存页面(方法)
 - C#设计模式--工厂模式和抽象工厂模式
			
话说有三大潮牌公司一直相互PK,有一天举办了一个活动让这三大公司来一个PK,我们来看看哪家公司的上衣做出来好看穿得舒服 现在我们有一个上衣的抽象产品让三大公司来做 //抽象产品 public inte ...
 - 微信开发之c#下jssdk签名生成
			
参考文章 :微信JS-SDK 权限签名算法 C#版 这篇文章讲解的的比较详细,而且算法准确,但是这篇文章有几个错误的地方需要注意; url必须动态生成 url不能写死,否则就算结果和官方检测的一致,也 ...
 - CentOS下Docker与.netcore(三)之 三剑客之一Docker-Compose
			
CentOS下Docker与.netcore(一) 之 安装 CentOS下Docker与.netcore(二) 之 Dockerfile CentOS下Docker与.netcore(三)之 三剑客 ...
 - 通过api获取句柄控制其他窗体
			
很多时候,编写程序模拟鼠标和键盘操作可以方便的实现你需要的功能,而不需要对方程序为你开放接口.比如,操作飞信定时发送短信等.我之前开发过飞信耗子,用的是对飞信协议进行抓包,然后分析协议,进而模拟协议的 ...
 - OO  面向对象的概念
			
面向对象的概念 一.什么是面向对象? 传统的:世间万物都是对象.例如:桌子,凳子,电脑等: 个人理解: 1.软件开发方法: 2.面向对象是一种解决问题和分析问题的(编程)一种思想: 3.他是通过面向过 ...
 - MySQL不带where条件的UPDATE和DELETE 限制操作说明
			
本文来自 网易云社区 . 数据安全是业务的基石,但是DBA 总会遇到救火情况,业务误删除全表或者误更新错全表业务数据,导致服务不可用 sql_safe_updates参数可以限制不带where条件的u ...
 - [ActionScript 3.0]  常用的正则表达式
			
as 3.0常用的正则表达式: /* * 去除字符串前面的空格和跳格符 */ var src:String=" Hello! "; trace(src); //原文本 trace( ...