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(); } }