Android开发详解之ListView详解一

列表ListView介绍和实例

1.ListView  -- ListActivity -- ListAdapter

2.ArrayAdapter结合ListView进行显示

3.SimpleAdapter结合ListView进行显示

4.处理单击ListView事件,处理选择ListView的事件

5.使用SimpleCursorAdapter与ListView进行关联

ListView :

要让一个ListView显示出来需要的3个条件:

1.ListView  --- 需要被显示的列表

2.Data      --- 和ListView绑定的数据,一般是一个Cursor或字符串数组

3.ListAdapter --- data和ListView的桥梁  --- 适配作用

常用ListAdapter子类:

ArrayAdapter     ---  数组适配  ---- ListAdapter的直接子类

ArrayList<类型>(context,int itemLayout, data)

context:上下文环境

itemLayout:自定义的每一项要显示的Layout

data:要显示的数据

例子:

ArrayAdapter<String> adapter = new ArrayAdapter<String>(ArrayAdapterListViewActivity.this, android.R.layout.simple_list_item_1, data);

android.R.layout.simple_list_item_1  --- 使用Android自带的 每一项Listview显示布局   -- 实际应用中常常自定义此item布局

特别注意:itemLayout  --- ListView中每一项(行)的布局  ---  可以引用系统自带的,但 实际项目中更多是使用自定义的item布局

系统自带的常用item布局:

android.R.layout.simple_list_item_1    ----- 每一项只有一个TextView

android.R.layout.simple_list_item_1    ----- 每一项只有两个TextView

android.R.layout.simple_list_item_single_choice   ----- 每一项有一个TextView,但这一项可以被选择

SimpleAdapter    ---  简单适配  ---- ListAdapter的直接子类

通过SimpleAdapter可以让ListView当中的每一项内容更加个性化,

通常将ListView中某项的布局信息写在XML文件中,这个布局文件通过R.layout.XX -- 引入到ListView中

SimpleAdapter是ArrayList和Listview之间的桥梁

ArrayList中的每一项都是一个Map<String,?>类型。ArrayList当中的每一项Map对象都和ListView当中的一项进行数据绑定和一一对应

SimpleAdapter的构造器:

public SimpleAdapterK(Context context, List<? extends Map<String,?>> data, int resource, String[] from , int[] to)

context  -- 上下文

data     -- 基于Map的List,Data里面的每一项都和ListIView里的每一项对应。Data里面的每一项都是Map类型,

这个Map类中包含了ListView每一行需要的数据  --- 常用  data = new ArrayList<Map<String,Object>>();

resource -- 一个layout, 必须包含在to中出现的那些View,系统提供或自定义layout布局都可。

系统提供的有:android.R.layout.simpe_list_item_single_choice

android.R.layout.two_line_list_item

from     -- 数组名,每一个名字是为了在ArrayList中的每一个item中索引Map<String, Object>的Object用的

to       -- 这里面是一个TextView的数组,这些TextView以id形式表示,这鞋View必须是TextView

为ListView中的每一项添加事件处理:    OnItemClickListener

OnItemClickListener listener = new OnItemClickListener() {

@Override

public void onItemClick(AdapterView<?> parent, View view, int position,

long id) {

setTitle(parent.getItemAtPosition(position).toString());

}

};

listView.setOnItemClickListener(listener);

说明:

onItemClick  --  回调函数,当用户单击ListView每一项时,自动执行

parent     --- 被单击的ListView

view       --- 用户操作的那一项

position   --- 操作的item项在ListView中的位置

id         --- 被选中的那一行的id

getItemAtPosition(position)  --- 通过position获得和这一行绑定的数据, 本例中只是把改行内容作为title写出来

listView.setOnItemClickListener(listener)   --- 将监听器注册到ListView中

实例代码:

ArrayAdapter与ListView

package com.example.androidbasicdemo1;

import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.ArrayAdapter;
import android.widget.ListView;

/**
 * ArrayList<类型>(context,int itemLayout, data)
 * context:上下文环境
 * itemLayout:自定义的每一项要显示的Layout
 * data:要显示的数据
 *
 * 例子:
 * ArrayAdapter<String> adapter = new ArrayAdapter<String>(ArrayAdapterListViewActivity.this, android.R.layout.simple_list_item_1, data);
   android.R.layout.simple_list_item_1  --- 使用Android自带的 每一项Listview显示布局   -- 实际应用中常常自定义此item布局

 * @author JayHe
 *
 */
public class ArrayAdapterListViewActivity extends Activity {

	private ListView listView;

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

		//从xml布局文件中获得ListView对象
		listView = (ListView) findViewById(R.id.arrayadapterlistView1);

		//定义要显示的数据
		String[] data = getResources().getStringArray(R.array.items_country);
		//定义适配器
		ArrayAdapter<String> adapter = new ArrayAdapter<String>(ArrayAdapterListViewActivity.this, android.R.layout.simple_list_item_1, data);

		//为ListView添加适配器
		listView.setAdapter(adapter);
	}

	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		getMenuInflater().inflate(R.menu.array_adapter_list_view, menu);
		return true;
	}

	@Override
	public boolean onOptionsItemSelected(MenuItem item) {
		int id = item.getItemId();
		if (id == R.id.action_settings) {
			return true;
		}
		return super.onOptionsItemSelected(item);
	}

}

SimpleAdapter与ListView

package com.example.androidbasicdemo1;

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

import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ListView;
import android.widget.SimpleAdapter;

public class SimpleAdapterListViewActivity extends Activity {

	private List<Map<String, Object>> data;

	private ListView listView;

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

		listView = (ListView) findViewById(R.id.simpleadapterlistView1);

		SimpleAdapter adapter = new SimpleAdapter(SimpleAdapterListViewActivity.this, prepareData(), R.layout.slef_list_item1,new String[]{"姓名","性别"}, new int[]{R.id.selflistview1textView1,R.id.selflistview1textView2});

		listView.setAdapter(adapter);

		OnItemClickListener listener = new OnItemClickListener() {

			@Override
			public void onItemClick(AdapterView<?> parent, View view, int position,
					long id) {
				setTitle(parent.getItemAtPosition(position).toString());
			}
		};

		listView.setOnItemClickListener(listener);

	}

	private List<Map<String, Object>> prepareData(){
		data = new ArrayList<Map<String, Object>>();
		Map<String, Object> item;
		item = new HashMap<String, Object>();
		item.put("姓名", "吴欢小盆友");
		item.put("性别", "女");
		data.add(item);
		item = new HashMap<String, Object>();
		item.put("姓名", "冯荣小朋友");
		item.put("性别", "女");
		data.add(item);
		item = new HashMap<String, Object>();
		item.put("姓名", "夏明");
		item.put("性别", "男");
		data.add(item);
		item = new HashMap<String, Object>();
		item.put("姓名", "小华");
		item.put("性别", "男");
		data.add(item);
		return data;
	}
	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		getMenuInflater().inflate(R.menu.simple_adapter_list_view, menu);
		return true;
	}

	@Override
	public boolean onOptionsItemSelected(MenuItem item) {
		int id = item.getItemId();
		if (id == R.id.action_settings) {
			return true;
		}
		return super.onOptionsItemSelected(item);
	}

}

Android开发详解之ListView详解一

时间: 2024-08-05 12:34:47

Android开发详解之ListView详解一的相关文章

Android开发技巧之viewstub用法详解及实现延迟加载

这一篇是接着上面的include标签的例子来讲的,地址http://blog.csdn.net/jason0539/article/details/26131831 上一篇的布局中间就用了viewstub这个控件,现在来说一下其作用和用法 " ViewStub 是一个不可见的,大小为0的View,最佳用途就是实现View的延迟加载,避免资源浪费,在需要的时候才加载View " 需要注意的是,加载view之后,viewstub本身就会被新加载进来的view替换掉 上代码了,看完就理解了

Android开发:自定义GridView/ListView数据源

http://mobile.51cto.com/android-259861.htm 在开发中,我们常常会遇到比较复杂的GridView/ListView的布局,重新实现BaseAdapter不但能帮助我们实现我们想要的布局效果,并且在绑定大数据量时也不会感觉有卡壳现象.记得以前用一个ListView直接去绑定手机内的联系人Cursor(一百多号人),滑动的时候就会有卡的感觉.今天决定写个Demo是因为在项目中可能会要实现这样的一个效果:一个GridView中绑定4个ImageButton,有些

50个Android开发技巧(24 处理ListView数据为空的情况)

在移动平台上为用户展示数据的一个经常用法是将数据填充进一个List内,而此时须要注意的一点就是: 原文地址:(http://blog.csdn.net/vector_yi/article/details/24936163) 怎样处理须要填充的数据为空的情况? ListView及其它继承自AdapterView的类都有一个简便的处理这样的情况的方法:setEmptyView(View). 当ListView的Adapter为空或者Adapter的isEmpty()方法返回true的时候,它将会把设

Android开发教程复选框详解

前面麦子学院的android开发老师给大家介绍过关于Android开发教程单选框详解,今天麦子学院的android开发老师给大家讲android复选框的一些基本内容. ●设置复选框的Check状态的时候,调用setChecked()方法 ●追加Android复选框被选择时处理的时候, 1.调用setOnCheckedChangeListener()方法,并把CompoundButton.OnCheckedChangeListener实例作为参数传入 2.在CompoundButton.OnChe

Android开发5大布局方式详解

Android中常用的5大布局方式有以下几种: 线性布局(LinearLayout):按照垂直或者水平方向布局的组件. 帧布局(FrameLayout):组件从屏幕左上方布局组件. 表格布局(TableLayout):按照行列方式布局组件. 相对布局(RelativeLayout):相对其它组件的布局方式. 绝对布局(AbsoluteLayout):按照绝对坐标来布局组件. 1. 线性布局 线性布局是Android开发中最常见的一种布局方式,它是按照垂直或者水平方向来布局,通过“android:

Android开发 碎片Fragment的API全解与标准使用

前言 我还在学习Android开发的时候发过一篇简单的入门Fragment demo代码:https://www.cnblogs.com/guanxinjing/p/9708626.html 但是,Fragment远远不是一个简单的Demo就能了解清楚的,所以此篇博客将讲解FragmentManage的Api的功能 如何获取FragmentManage activity里获取FragmentManage方式如下: @Override protected void onCreate(Bundle

Android开发中常用的ListView列表的优化方式ViewHolder

在Android开发中难免会遇到大量的数据加载到ListView中进行显示, 然后其中最重要的数据传递桥梁Adapter适配器是常用的,随着市场的需 求变化ListView'条目中的内容是越来越多这就需要程序员来自定义适配器, 而关键的就是适配器的优化问题,适配器没有优化好往往就会造成OOM (内存溢出)或者是滑动卡顿之类的问题,接下来我就给大家介绍一种常 用的Adapter优化方法 1 /** 2 * list View的适配器 3 */ 4 class Adapter extends Bas

android开发干货:实现listview异步加载图片

针对listview异步加载图片这个问题,麦子学院android开发老师讲了一种非常实用的方法,麦子学院android开发老师说凡是是要通过网络获取图片资源一般使用这种方法比较好,用户体验好,下面就说实现方法,先贴上主方法的代码: package cn.wangmeng.test; import java.io.IOException; import java.io.InputStream; import java.lang.ref.SoftReference; import java.net.

Android开发数据存储之ContentProvider详解

转载:十二.ContentProvider和Uri详解 一.使用ContentProvider(内容提供者)共享数据 ContentProvider在android中的作用是对外共享数据,也就是说你可以通过ContentProvider把应用中的数据共享给其他应用访问,其他应用可以通过ContentProvider对你应用中的数据进行添删改查.关于数据共享,以前我们学习过文件操作模式,知道通过指定文件的操作模式为Context.MODE_WORLD_READABLE或Context.MODE_W