package com.example.app5;

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.view.ViewTreeObserver.OnScrollChangedListener;
import android.widget.AbsListView;
import android.widget.AbsListView.OnScrollListener;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.SimpleAdapter;
import android.widget.Toast;
/*
* ListView:Android系统中显示列表的空间
* 数据适配器:将复杂的数据(数组。链表,数据库,集合)填充在指定视图界面上
* ArrayAdapter(数组适配器):用于绑定格式单一的数据
* 数据源:可以是集合或数组
* SimpleAdapter(简单适配器):用于绑定格式复杂的数据
* 数据源:只能是特定泛型的集合
*
* 数据适配器是连接数据源和视图界面的桥梁
* 实现过程:新建适配器-》添加数据源到适配器-》视图加载适配器
*/
/*
* 监听器:
* OnItemClickListener:可以处理视图中单个条目的点击事件
* OnScrollListener:
* 监测滚动的变化,可以用于视图在滚动中加载数据
*
* 监听器是程序和用户交互的桥梁
*/
public class ListView1 extends Activity implements OnItemClickListener,OnScrollListener{
private ListView listView;
private ArrayAdapter<String>arr_adapter;
private SimpleAdapter sim_adapter;
private List<Map<String,Object>> dataList;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_listview);
listView = (ListView)findViewById(R.id.listView2);
//1.新建一个数据适配器
//ArrayAdapter(上下文,当前ListView加载的每一个列表项所对应的布局文件)
/*
* SimpleAdapter:
* context:上下文
* data:数据源(List<? extends Map<String,?>> data 一个Map组成的list集合 )
* 每个Map对应ListView中的一行
* 每个Map(键值对)中的键必须包含所有在from中所指定的键
* resource:列表项的布局文件ID
* from:Map 中的键名
* to:绑定数据视图中的ID,与from成对应关系
*
*/ //2.适配器加载数据源
String[] arr_data = {"zhangsan","lisi","wangwu","zhaoliu","zhouqi"};
arr_adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, arr_data); dataList = new ArrayList<Map<String,Object>>();
sim_adapter = new SimpleAdapter(this, getData() ,R.layout.item1,new String[]{"image","text"},new int[]{ R.id.image, R.id.text}); //3.视图(listView)加载适配器
// listView.setAdapter(arr_adapter);
listView.setAdapter(sim_adapter);
//设置监听器
listView.setOnItemClickListener(this);
listView.setOnScrollListener( this);
}
private List<Map<String,Object>> getData(){
for(int i= 0;i<20;i++){
Map<String,Object>map = new HashMap<String,Object>();
map.put("i", R.drawable.pic2);
map.put("text", "image"+(i+1));
dataList.add(map);
}
return dataList;
}
@Override
public void onScrollStateChanged(AbsListView view, int scrollState) {
// TODO Auto-generated method stub
//scrollState 滚动状态
switch(scrollState){
case SCROLL_STATE_FLING:
System.out.println("用户在手指离开屏幕前,用力滑动了屏幕,视图惯性继续滑动");
Map<String,Object> map = new HashMap<String,Object>();
map.put("image", R.drawable.pic2);
map.put("text", "添加项");
dataList.add(map);
sim_adapter.notifyDataSetChanged();
break;
case SCROLL_STATE_IDLE:
System.out.println("视图已经停止滑动");
break;
case SCROLL_STATE_TOUCH_SCROLL:
System.out.println("手指没有离开屏幕,视图正在滑动");
break; }
}
@Override
public void onScroll(AbsListView view, int firstVisibleItem,
int visibleItemCount, int totalItemCount) {
// TODO Auto-generated method stub }
@Override
public void onItemClick(AdapterView<?> parent, View view, int position,
long id) {
// TODO Auto-generated method stub
String text = listView.getItemAtPosition(position)+"";
Toast.makeText(this, position+"--"+text, Toast.LENGTH_SHORT).show(); } }

Android_listView的更多相关文章

  1. Android_listview设置每条信息的间距

    Android_listview设置每条信息的间距 设置listView的item间距,可以在xml布局文件中的listView下设置xml属性: android:divider="#000 ...

  2. Android_ListView简单例子

    ListView是Android软件开发中非常重要组件之一,基本上是个软件基本都会使用ListView ,今天我通过一个demo来教大家怎么样使用ListView组件 activity_main.xm ...

  3. Android_ListView适配器

    ListView如何优化 复用convertView缓存(减少ListView绘制). 自定义静态类ViewHolder(减少findViewById次数),通过setTag().getTag()获取 ...

  4. Android开发10.1:UI组件适配器AdapterView(创建ListView,Adapter接口)

    @version:Android4.3 API18 @author:liuxinming 概述               AdapterView继承了ViewGroup,它的本质是容器       ...

  5. 安卓---下拉刷新---上拉加载---解决导入library等自生成库文件失败的问题

    本文的下拉刷新以及上拉加载都是用PullToRefresh实现的,关于PullToRefresh的介绍以及源码,网上可以找到很多,本人在此不再赘述. PullToRefresh是一套实现非常好的下拉刷 ...

  6. android 开发-ListView列表显示控件的实现

    列表的显示需要三个元素: 1.ListVeiw 用来展示列表的View. 2.适配器 用来把数据映射到ListView上的中介. 3.数据    具体的将被映射的字符串,图片,或者基本组件. 根据列表 ...

  7. Android layout的XML

    [注]此文是在学习andriod中的一些理解和总结,若有错望留言指教,谢谢 1 <RelativeLayout xmlns:android="http://schemas.androi ...

  8. 怎样使用ListView?

    怎样使用ListView? watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFC ...

随机推荐

  1. C++基类和派生类之间的转换

    本文讲解内容的前提是派生类继承基类的方式是公有继承,关键字public 以下程序为讲解用例. #include<iostream> using namespace std; class A ...

  2. ubuntu 常用软件配置

    1. 首先重装系统后需要执行: sudo apt-get install update 2. 然后安装必要的软件:    terminator, vim, git,

  3. Serach

    1.二分查找 public class BubbleSort { public static int binarySerach(int[] a,int value){ int low=0; int h ...

  4. angularjs 中ie兼容性的问题收集

    今天在项目中做ie8的兼容的时候,发现angularjs中一些内容这样写有问题,那样写就没有问题了,自己记录一下内容: 如果遇到了ie8中使用$http.post请求不到数据的时候,以下的方法是获取不 ...

  5. python 定义函数

    在Python中,定义一个函数要使用def语句,依次写出函数名.括号.括号中的参数和冒号:,然后,在缩进块中编写函数体,函数的返回值用return语句返回. 我们以自定义一个求绝对值的my_abs函数 ...

  6. hdoj 2682 Tree

    Tree Time Limit: 6000/2000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submis ...

  7. [一]JQueryMobile简介

    JQueryMobile 基于JQuery,实现对不同尺寸手机屏幕的支持,提供了许多组件,以及对于手机端的常用事件(touch.tap.taphold) 如何使用 1.引入jquery.js.jque ...

  8. Handlebar

    1.Handlebar中文网: http://www.ghostchina.com/introducing-the-handlebars-js-templating-engine/ 2.http:// ...

  9. 如何在64位系统上安装SQL Server 2000

    如何在64位系统上安装SQL Server 2000? 现在用SQL Server 2000数据库的人少了吧?大都是SQL Server 2005/2008了.不过还是有需求的,今天一朋友就让我在他的 ...

  10. spring源码解析(一)---占位符解析替换

    一.结构类图 ①.PropertyResolver : Environment的顶层接口,主要提供属性检索和解析带占位符的文本.bean.xml配置中的所有占位符例如${}都由它解析 ②.Config ...