五步学会Android的ListView控件

<span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);">使用Android的列表控件有几点要注意:
</span>
<span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);">一、要设计一个类来代表控件中的一行所要展示的数据,例如User类;</span>
<span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);">二、要设计一个layout来展示控件中的一行,例如user_item.xml;</span>
<span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);">三、要继承BaseAdapter类来包含列表控件中所有的数据列表,以及其展现方法;</span>
<span style="font-family:Arial, Helvetica, sans-serif;"><span style="background-color: rgb(255, 255, 255);">四、要在列表控件所在的Activity中加入设置代码。</span></span>
<span style="font-family:Arial, Helvetica, sans-serif;"><span style="background-color: rgb(255, 255, 255);">五、刷新列表控件时请使用BaseAdapter的notifyDataSetChanged方法和ListView类的invalidate方法。</span></span>
<span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);">
</span>
<span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);">具体使用分为以下五步:</span>
<span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);">
</span>
<span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);">1.在需要使用listview控件的layout中加入该控件;</span>
<span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);">2.listview控件的每一行对应一组数据,可以将这一组数据组成一个类,例如User类:</span>
public class User {
	private String id;
	private String name;
	private String phone;
	private String passwd;
	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 getPhone() {
		return phone;
	}
	public void setPhone(String phone) {
		this.phone = phone;
	}
	public String getPasswd() {
		return passwd;
	}
	public void setPasswd(String passwd) {
		this.passwd = passwd;
	}

}

3.为listview控件的每一行设计一个layout,这个layout就是为了展示User类的实例,例如:

<?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/id"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="id" />

    <TextView
        android:id="@+id/name"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="name" />

    <TextView
        android:id="@+id/phone"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="phone" />

    <TextView
        android:id="@+id/passwd"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="passwd" />

</LinearLayout>

4.为该listview设计一个Adapter类,这个类包含了listview所要展示的对象列表,并在其getView(int, View, ViewGroup)方法中详细描述了如何展示每一行数据,例如:

package com.dumaisoft.kidscore.adapter;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

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.dumaisoft.kidscore.R;
import com.dumaisoft.kidscore.api.User;
import com.dumaisoft.kidscore.db.dao.UserDao;

/**
 * @author wxb
 * 用户的列表Adapter
 */
public class UserAdapter extends BaseAdapter {
	private Context context;
	private List<User> userlist;

	public UserAdapter(Context c){
		context = c;
		userlist = new ArrayList<User>();
		refreshData();
	}

	@Override
	public void notifyDataSetChanged() {
		// TODO Auto-generated method stub
		super.notifyDataSetChanged();
		refreshData();
	}

	/**
	 * 刷新用户列表,从数据库中重新读取
	 */
	public void refreshData(){
		userlist.clear();
		//列出每一个User,加入队列
		UserDao userdao = new UserDao(context);
		List<Map<String, String>> listmap = userdao.listUserMaps(null,null);
		for(int i =0;i<listmap.size();i++){
			Map<String,String > map = new HashMap<String, String>();
			map = listmap.get(i);
			User user = new User();
			user.setId(map.get("user_id"));
			user.setName(map.get("user_name"));
			user.setPhone(map.get("user_phone"));
			user.setPasswd(map.get("user_password"));
			userlist.add(user);
		}
	}

	@Override
	public int getCount() {
		// TODO Auto-generated method stub
		return userlist.size();
	}

	@Override
	public Object getItem(int position) {
		// TODO Auto-generated method stub
		return userlist.get(position);
	}

	@Override
	public long getItemId(int position) {
		// TODO Auto-generated method stub
		return position;
	}

	@Override
	public View getView(int position, View convertView, ViewGroup parent) {
		if (convertView == null) {
			convertView = LayoutInflater.from(context).inflate(
					R.layout.user_item, null);
		}
		User user = userlist.get(position);
		TextView id = (TextView) convertView.findViewById(R.id.id);
		id.setText(user.getId());
		TextView name = (TextView) convertView.findViewById(R.id.name);
		name.setText(user.getName());
		TextView phone = (TextView) convertView.findViewById(R.id.phone);
		phone.setText(user.getPhone());
		TextView passwd = (TextView) convertView.findViewById(R.id.passwd);
		passwd.setText(user.getPasswd());

		return convertView;
	}
}

5.在Activity类中添加listview的设置代码:

package com.dumaisoft.kidscore.activity;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.BaseAdapter;
import android.widget.ListView;

import com.dumaisoft.kidscore.R;
import com.dumaisoft.kidscore.adapter.UserAdapter;

public class UserActivity extends Activity {
	private UserActivity _c = this;
	private ListView listview;
	private UserAdapter useradapter;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
        setContentView(R.layout.user_activity);

        this.findViewById(R.id.btn_user_add).setOnClickListener(new OnClickListener() {
			@Override
			public void onClick(View v) {
				startActivity(new Intent(_c,UserAddActivity.class));
			}
		});

        this.findViewById(R.id.btn_user_refresh).setOnClickListener(new OnClickListener() {
			@Override
			public void onClick(View v) {
				((UserAdapter) listview.getAdapter()).notifyDataSetChanged();
				listview.invalidate();
			}
		});

        useradapter = new UserAdapter(_c);
        listview = (ListView) this.findViewById(R.id.listUser);
        listview.setAdapter(useradapter);
	}

	@Override
	protected void onDestroy() {
		// TODO Auto-generated method stub
		super.onDestroy();
	}
}
时间: 2024-12-28 18:44:19

五步学会Android的ListView控件的相关文章

【Android】解决Android的ListView控件滚动时背景变黑

[转载]解决Android的ListView控件滚动时背景变黑 如果大家在非黑色背景下使用ListView控件时,Android默认可能在滚动ListView时这个列表控件的背景突然变成黑色.这样可能导致程序的黑色的背景和主程序的主题既不协调.解决的方法Google在设计Android时也考虑了,在Layout的ListView中加入android:cacheColorHint="#00000000" 的属性即可. 如: <?xml version="1.0"

Android 自定义ListView控件,滑动删除

1.触摸事件 dispatchTouchEvent 判断是否处理触摸动作 onTouchEvent 处理触摸动作 2.Android对于控制和获取View在屏幕很强大 ListView: pointToPosition 根据触摸点获取item的位置 getChildAt 根据索引获取item的View,注意从第一个可视化的item算起 View: getLocationOnScreen获取View在屏幕的坐标 import android.content.Context; import andr

五、Android学习第四天补充——Android的常用控件(转)

(转自:http://wenku.baidu.com/view/af39b3164431b90d6c85c72f.html) 五.Android学习第四天补充——Android的常用控件 熟悉常用的Android的几个常用控件的使用方法: 一.RadioGroup和RadioButton——单选按钮 二.Checkbox——复选框 三.Toast——提示框,会自动消失 四.ProgressBar——进度条工具 五.ListView——以列表形式将控件显示出来 下面就对这些内容做个详细的解释: 首

Android ListView控件的使用

如何做出下面的效果: 一. 先看下主界面的布局activity_main.xml:toolbar + ListView <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/a

Android——ListView控件

本篇介绍ListView控件,这是Android中比较重要也比较复杂的控件,这里只谈到使用ViewHolder机制优化即可. 一.ListView简介 ListView是Android系统中显示列表的控件,每个ListView都可以包含很多个列表项. 二.ListView的使用 概念不多说,直接来介绍使用方法. ListView中比较复杂的是数据适配器,其作用是把复杂的数据(数组.链表.数据库.集合等)填充在指定视图界面,是连接数据源和视图界面的桥梁.常见的Android原生的适配器有Array

Android的重要控件ListView的诸多问题处理方案

知识概要 ListView是android中常用控件之一,当ListView和CheckBox.Button等控件一起用时,会出现很多问题,如ListView条目不可选,ListView内存溢出.全选与反选等. 1. 内容 利用ListView创建一个菜单 创建一个Fruit类 public class Fruit { private String name; private int img; public Fruit(String name, int img) { this.name = na

Android开发:ListView控件:给Item绑定了点击事件,却点击无效

一.问题引入 ListView控件:给Item绑定了点击事件,却点击无效. 二.解决方案 ListView使用了自定义布局文件,在布局文件中有button等控件时,这些控件获取焦点的级别比listView的item高,所以当点击item时,button等控件会优先获得点击焦点. 解决方法就是在布局文件根元素中添加属性: android:descendantFocusability="blocksDescendants" android:descendantFocusability De

Xamarin Android ListView 控件使用

在项目中通常用到了ListView控件,示例如下: create the listitem class ,eg; public class ColorItem { public string ColorName { get; set; } public string Code { get; set; } public Android.Graphics.Color Color { get; set; } } create Adapter class: Adapter类需要实现BaseAdapter

android学习五(android中基本控件的使用)

前面已经学了activity的一些使用,那么下面我们进行android中基本的控件的学习和使用. 1.android中的TextView控件 新建一个项目,项目名为UITest,才有默认的设置,修改布局文件的内容,如下: <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" a