Android_listView

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();
            
        }
    
}
原文地址:https://www.cnblogs.com/fangg/p/5583027.html