一、界面设计:

  1、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" >
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal" > <TextView
android:layout_width="120dp"
android:layout_height="wrap_content"
android:text="@string/name" />
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/age" />
</LinearLayout> <ListView
android:id="@+id/listView"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginTop="20dp" > </ListView> </RelativeLayout>

  2、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="horizontal" > <TextView
android:id="@+id/name"
android:layout_width="120dp"
android:layout_height="wrap_content"
/>
<TextView
android:id="@+id/age"
android:layout_width="match_parent"
android:layout_height="wrap_content"
/>
</LinearLayout>

  3、最终测试界面:

  每行显示用户名称和年龄。

二、三种方式将数据绑定到ListView控件上:

package com.example.listview;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List; import android.app.Activity;
import android.database.Cursor;
import android.os.Bundle;
import android.support.v4.widget.SimpleCursorAdapter;
import android.view.Menu;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ListView;
import android.widget.SimpleAdapter;
import android.widget.Toast; import com.example.entity.Person;
import com.example.lservice.DBPersonService;
import com.example.lservice.PersonAdapter; public class MainActivity extends Activity { private ListView listView;
private DBPersonService personService; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
listView = (ListView) this.findViewById(R.id.listView);
personService = new DBPersonService(this);
     //监听行点击事件
listView.setOnItemClickListener(new OnItemClickListener() {
//parent:指当前被点击条目的listview view:指当前被点击的条目 position:被点击条目的索引
@Override
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
ListView lv = (ListView) parent;
/*
* 1、自定义适配器当前条目是Person对象。
* 2、采用SimpleCursorAdapter适配器,返回的是Cursor对象。
* 3、采用SimpleAdapter适配器,返回的是HashMap<String, Object>对象。
*/
Person p = (Person) lv.getItemAtPosition(position);
String info = p.getName() + " " + position + " " + id;
Toast.makeText(getApplicationContext(), info, 1).show(); } });
show3();
} //第一种: 使用SimpleAdapter作为适配器
private void show() {
List<Person> persons = personService.getScrollData(0, 20);
List<HashMap<String, Object>> data = new ArrayList<HashMap<String, Object>>();
for (Person person : persons) {
HashMap<String, Object> map = new HashMap<String, Object>();
map.put("name", person.getName());
map.put("age", person.getAge());
data.add(map);
}
SimpleAdapter adapter = new SimpleAdapter(this, data,
R.layout.item,// 就是一个界面显示文件item.xml
new String[] { "name", "age" },//from: 从结果集中获取数据,将需要显示的数据列名放到该集合
new int[] { R.id.name, R.id.age }// to:将结果集的数据字段对应到listview(item.xml)上
);
listView.setAdapter(adapter);
} //第二种: 使用SimpleCursorAdapter作为适配器
private void show2() {
Cursor cursor = personService.getCursorScrollData(0, 20);
// 使用SimpleCursorAdapter适配器注意两个问题:
// 1、返回的游标对象不能被关闭。
// 2、查询语句字段必须有"_id"这个字段,例如:select id as _id,name,age from person。
@SuppressWarnings("deprecation")
SimpleCursorAdapter adapter = new SimpleCursorAdapter(this,
R.layout.item, cursor, new String[] { "name", "age" },
new int[] { R.id.name, R.id.age });
listView.setAdapter(adapter);
} //第三种: 自定义适配器PersonAdapter
private void show3() {
List<Person> persons = personService.getScrollData(0, 10);
PersonAdapter adapter = new PersonAdapter(this, persons, R.layout.item);
listView.setAdapter(adapter);
} @Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.main, menu);
return true;
} }

  自定义适配器类实现:

package com.example.lservice;

import java.util.List;

import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.TextView; import com.example.entity.Person;
import com.example.listview.R; public class PersonAdapter extends BaseAdapter {
//被绑定的数据
private List<Person> persons;
//绑定条目界面
private int resource;
//布局填充,作用是可以用xml文件生成View对象
private LayoutInflater inflater; public PersonAdapter(Context context,List<Person> persons, int resource) {
this.persons = persons;
this.resource = resource;
inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
} @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;
} //会缓存之前的View
@Override
public View getView(int position, View convertView, ViewGroup parent) {
TextView nameView =null;
TextView ageView = null;
if (convertView == null) {// 表示是第一页,需要创建该对象
//生成条目界面对象
convertView = inflater.inflate(resource, null);
nameView = (TextView) convertView.findViewById(R.id.name);
ageView = (TextView) convertView.findViewById(R.id.age);
ViewCache cache = new ViewCache();
cache.ageView=ageView;
cache.nameView=nameView;
//Tags can also be used to store data within a view without resorting to another data structure.
convertView.setTag(cache);
}else{
ViewCache cache = (ViewCache) convertView.getTag();
nameView = cache.nameView;
ageView = cache.ageView;
}
// TextView nameView = (TextView) convertView.findViewById(R.id.name);
// TextView ageView = (TextView) convertView.findViewById(R.id.age);
Person person = persons.get(position);
nameView.setText(person.getName());
//setText方法:被设置的值要转换成字符串类型,否则出错
ageView.setText(person.getAge().toString()); return convertView;
}
/**
* 由于每次都要查找View对象,因此就通过setTag将其保存起来。
* @author Administrator
*
*/
private final class ViewCache{
public TextView nameView;
public TextView ageView; }
}

Android学习笔记_11_ListView控件使用的更多相关文章

  1. [Android学习笔记]组合控件的使用

    组合控件的使用 开发过程中,多个UI控件需要协同工作,相互交互之后,才可完成一个完整的业务需求,此时可把这些控件封装成为一个整体,相互之间的交互逻辑封装其中,外部调用可无需关心内部逻辑,只需获取处理后 ...

  2. android学习笔记七——控件(DatePicker、TimePicker、ProgressBar)

    DatePicker.TimePicker ==> DatePicker,用于选择日期 TimePicker,用于选择时间 两者均派生与FrameLayout,两者在FrameLayout的基础 ...

  3. 十三、Android学习笔记_Andorid控件样式汇总

    <!-- 设置activity为透明 --> <style name="translucent"> <item name="android: ...

  4. Android学习笔记_75_Andorid控件样式汇总

    <!-- 设置activity为透明 --> <style name="translucent"> <item name="android: ...

  5. Android学习笔记_57_ExpandableListView控件应用

    1.布局文件: <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:andr ...

  6. android菜鸟学习笔记12----Android控件(一) 几个常用的简单控件

    主要参考<第一行代码> 1.TextView: 功能与传统的桌面应用开发中的Label控件相似,用于显示文本信息 如: <TextView android:layout_width= ...

  7. android菜鸟学习笔记14----Android控件(三) ListView的简单使用

    MVC模式: MVC的基本原理就是通过Controller连接View和Model.当View中所显示的数据发生变化时,会通知Controller,然后由Controller调用Model中的相关方法 ...

  8. android菜鸟学习笔记13----Android控件(二) 自定义控件简单示例

    有时候,可能觉得系统提供的控件太丑,就会需要自定义控件来实现自己想要的效果. 以下主要参考<第一行代码> 1.自定义一个标题栏: 系统自带的标题栏很丑,且没什么大的作用,所以我们之前会在o ...

  9. iOS学习笔记——基础控件(上)

    本篇简单罗列一下一些常用的UI控件以及它们特有的属性,事件等等.由于是笔记,相比起来不会太详细 UIView 所有UI控件都继承于这个UIView,它所拥有的属性必是所有控件都拥有,这些属性都是控件最 ...

随机推荐

  1. Java性能调优-jstack-jstat-jmap

    0. 必须在java进程的用户下执行 a). 先排查自己业务代码,再第三方的开源代码 b). 工具类都在jdk/bin目录下, 实现代码在tools.jar中 1. jstack-线程快照-死锁/阻塞 ...

  2. 简单实现 ArrayList

    java中提供了多个集合框架 其中就有ArrayList  下面简单的实现一下 只写了添加,获取长度和根据下标获取元素的方法 public class MyArrayList { //定义一个obje ...

  3. backbone应用笔记

    由于公司手机端web的需要,最近开始用上backbone,之前觉得很难学,也一直没看到前端mvc具体是个啥,后来由于项目紧急,就抽空看了一遍underscore和backbone的源码,收获还是蛮大的 ...

  4. [转]微信小程序登录逻辑梳理

    本文转自:http://www.jianshu.com/p/d9996cafdb31 官方文档 文档相关地址: 用户登录 获取用户数据 用户数据的签名验证和加解密                   ...

  5. 使用Access作数据库

    import java.sql.*; public class ConnectAccess { public static void main(String args[]){ ConnectAcces ...

  6. c# 字体库跨域解决

    网上大部分的资料说的都是在apache和ng服务器的情况下解决方案,但基本的思路都是添加响应头 场景: 页面引用css文件: <link href="http://www.tuohua ...

  7. oracle学习篇十:序列

    序列:是用来生成唯一.连续的整数的数据库对象.序列通常用来自动生成主键或唯一键的值. 1. 创建序列语法如下: Create SEQUENCE sequence_name [START WITH in ...

  8. html-其他常见标签的使用

    b:加粗 s:删除线 u:下划线 i:斜体 per:原样输出 sup:上标 sub:下标 p:段落标签 比br多一行 (CSS) div:自动换行 span:在一行显示 完整代码: <html& ...

  9. 区域可编辑contenteditable的问题总结

    一.如何在可编辑区域div的光标处通过点击事件来添加文本内容 下面的例子是可编辑div的区域添加文本内容和判断光标位置的方法 <!DOCTYPE html> <html lang=& ...

  10. angular监听移动端键盘的弹起和收回

    页面的提交按钮采用的是固定定位在页面的底部,键盘弹出后,提交按钮紧挨着键盘的上方,输入框获得焦点后,键盘弹出,并且输入框回自动定位上方的空白处,此时由于键盘上方固定定位的提交按钮的原因有可能会遮挡住获 ...