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. The new Portable Class Library for SQLite z

    Microsoft Open Technologies has recently released a Portable Class Library for SQLite. Thanks to it, ...

  2. 一个简单的MDI示范程序(Delphi)

    http://www.cnblogs.com/pchmonster/archive/2012/01/07/2316012.html 最为一个巩固之前有关窗体和对象的有关知识,下面就建立一个简单的MDI ...

  3. Mongo DB 安装-及分布式集群部署(初稿)

    一.安装步骤, 1, 下载最新的Mongo DB数据库:http://www.mongodb.org/downloads?_ga=1.44426535.2020731121.1421844747\ 下 ...

  4. class0513(html基础加强)

    内容:HTML.CSS 目标:掌握手写HTML实现一般难度的Web页面的能力(如网站注册表单),为ASP.Net学习打基础.坚持手写HTML,可视化设计只是一种自学的手段. 参考书:张孝祥<Ja ...

  5. 进程隐藏与进程保护(SSDT Hook 实现)(一)

    读了这篇文章终于明白大致怎么回事了 文章目录:                   1. 引子 – Hook 技术: 2. SSDT 简介: 3. 应用层调用 Win32 API 的完整执行流程: 4 ...

  6. leetcode—Best Time to Buy and Sell stocks III

    1.题目描述 Say you have an array for which the ith element is the price of a given stock on day i.   Des ...

  7. mapreduce学习指导及疑难解惑汇总

    原文链接http://www.aboutyun.com/thread-7091-1-1.html 1.思想起源: 我们在学习mapreduce,首先我们从思想上来认识.其实任何的奇思妙想,抽象的,好的 ...

  8. hadoop面试题答案

    Hadoop 面试题,看看书找答案,看看你能答对多少(2) 1. 下面哪个程序负责 HDFS 数据存储.a)NameNode  b)Jobtracker  c)Datanode d)secondary ...

  9. HW7.2

    import java.util.Scanner; public class Solution { public static void main(String[] args) { Scanner i ...

  10. SGU132 - Another Chocolate Maniac(状态压缩DP)

    题目大意 给定一个N*M大小的大小的蛋糕,蛋糕的有些地方已经放置了东西,要求你在蛋糕上放入尽量少的1*2大小的巧克力,使得蛋糕不能够再放入巧克力 题解 和POJ1038恰好相反,此题是放入尽量少的巧克 ...