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# 中的 ref 和 out 的意义和使用方法

    原文C# 中的 ref 和 out 的意义和使用方法 向方法传递一个实参时,对应的形参会用实参的一个副本来初始化,不管形参是值类型(例如 int),可空类型(int?),还是引用类型,这一点都是成立的 ...

  2. POJ3087 Shuffle'm Up 简单模拟

    题意:就是给你两副扑克,然后一张盖一张洗牌,不断重复这个过程,看能不能达到目标的扑克顺序 分析:然后就模拟下,-1的情况就是有循环节 #include<cstdio> #include&l ...

  3. POJ 3321 Apple Tree(dfs序树状数组)

    http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=10486 题意:一颗有n个分支的苹果树,根为1,每个分支只有一个苹果,给出n- ...

  4. Django中的Model(操作表)

    Model 操作表 一.基本操作 # 增 models.Tb1.objects.create(c1='xx', c2='oo') #增加一条数据,可以接受字典类型数据 **kwargs obj = m ...

  5. Java内存管理原理及内存区域详解

    一.概述 Java虚拟机在执行Java程序的过程中会把它所管理的内存划分为若干不同的数据区域,这些区域都有各自的用途以及创建和销毁的时间.Java虚拟机所管理的内存将会包括以下几个运行时数据区域,如下 ...

  6. android获取根视图

    android获取根视图 activity.getWindow().getDecorView()

  7. Android实例-程序界面内截取屏幕(XE8+小米2)

    结果: 1.只能截取程序界面内的图片. 2.图片有点不清楚,自己设置清楚度. 实例代码: unit Unit1; interface uses System.SysUtils, System.Type ...

  8. .NET设计模式(5):工厂方法模式(Factory Method)

    ):工厂方法模式(Factory Method)    工厂方法模式(Factory Method) --.NET设计模式系列之五 Terrylee,2004年1月2日 转载:http://terry ...

  9. CentOS安装卸载memcache及JAVA示例

      原文地址:http://www.cnblogs.com/zhongshengzhen/   先安装libevent,memcached依赖libevent的lib [root@VM_64_81_c ...

  10. ECshop模板机制

    ECshop模板机制整理 模板机制 近期新项目涉及到ECshop的二次开发,趁此良机正好可以对闻名已久的ECshop系统进行深入了解.要了解一个系统,那么该系统的模板机制就是最重要的一环.相关整理如下 ...