Android-ListView详解(SimpleAdapter,ArrayAdapter,BaseAdapter,OnItenClickListener,OnScrollListener)

1.回顾

   上篇了解了 Androidmainfest.xml 的 作用

2.重点

   (1)SimpleAdapter 简单适配器:数据为特定泛型集合;

   (2)ArrayAdapter  数据为集合和数组 :用于绑定单一格式数据

   (3)BaseAdapter   数据为 集合和数组

   (4)OnItenClickListener  Item点击事件

   (5)OnScrollListener   滑动事件

3.SimpleAdapter

     参数1:上下文对象  这里为this

     参数2:数据集合 必须为 List<Map<String,String>> 类型的,每个Map<String,String> 为ListView的一行

     参数3:ListView的每行的布局文件,自己自定义   ,添加一个list_mian 布局 ,如下所示

     参数4:String [] 数组 为 每行里面 map对象的 key值

     参数5:为刚刚list_main 的布局中的 控件id 和 参数4 对应,显示数据

	List<Map<String, String>> maps=new ArrayList<Map<String,String>>();
        for(int i=0;i<20;i++){
        	Map<String,String> map=new HashMap<String, String>();
        	map.put("yuan","温县"+i);
        	map.put("ming","原明卓"+i);
        	maps.add(map);
        }
        SimpleAdapter  simpleAdapter=new SimpleAdapter(this,maps,R.layout.list_main,new String[]{"yuan","ming"},new int[]{R.id.textView1,R.id.textView2});
        listview1.setAdapter(simpleAdapter);
    

     list_main.xml 布局文件:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:orientation="vertical"
    android:layout_height="match_parent" >

    <TextView
        android:id="@+id/textView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="TextView" />

    <TextView
        android:id="@+id/textView2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="TextView" />

</LinearLayout>

4.  ArrayAdapter  

    参数1:上下文对象

    参数2:可以是自己的布局,也可以使用安卓本身带有的布局

    参数3:数据 ,这里是数组

		String []arr={"yuan","ming","zhuo","yuanming","yuanzhuo","yuanzhuo","yuanzhuo","yuanzhuo","yuanzhuo"};
		ArrayAdapter<String> arrayAdapter=new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1, arr);
		listview1.setAdapter(arrayAdapter);

5.BaseAdapter 

    第一步:新建类继承 BaseAdapter ,重新里面的方法

    第二步:使用构造函数传参(即数据)

    第三部:在getView里进行布局操作(引入的布局为自定义的)

    第四部:给Listview 设置 adapter

/**
	 * 继承baseAdapter 准备适配给listview
	 * @author yuan
	 * 
	 */
	class MovieListAdapter extends BaseAdapter{

		List<shared> mlist=null;
		
		public MovieListAdapter(List<shared> list) {
			//初始化 List<shared> 列表
			this.mlist=list;
		}
		
		@Override
		public int getCount() {
			return mlist.size();
		}

		@Override
		public Object getItem(int position) {
			return mlist.get(position);
		}

		@Override
		public long getItemId(int position) {
			return position;
		}

		@Override
		public View getView(int position, View convertView, ViewGroup parent) {
			//初始化 控件
			convertView=View.inflate(getApplicationContext(), R.layout.list_item,null);
			
			ImageView imageView=(ImageView)convertView.findViewById(R.id.img_movie);
			TextView movie_name=(TextView)convertView.findViewById(R.id.movie_name);
			TextView movie_totol=(TextView)convertView.findViewById(R.id.movie_totol);
		    
			//设置 背景为 灰色
			if(position%2==0){
			  convertView.setBackgroundColor(Color.GRAY);
			}
			
			//设置参数
			shared s=mlist.get(position);
			movie_name.setText(s.getName());
			movie_totol.setText(s.getTotol());
			//设置图片
			imageLoader_cache(imageView,s.getPic());
			
			return convertView;
	  }
		
		//加载图片
		private void imageLoader_cache(ImageView imageView,String pic){
			
			//设置 图片缓存 :体现 imageLoader的优势
	         //使用 LruBitmap + ImageCache 实现 
			//实例化对象
			ImageLoader imageLoader=new ImageLoader(VolleyApplication.getQueue(),new VolleyBitmapCache());
			// 图片监听 (默认图片,错误图片) 和 imageView
			ImageListener imageListener=ImageLoader.getImageListener(imageView,R.drawable.ic_launcher,R.drawable.ic_launcher);
			
			//加载图片 后面可以设置 图片的大小缩放
			imageLoader.get(VolleyHttpPath.getBasicPath()+"/"+pic,imageListener,0,0);
			
		}
		
	}

    将adapter 设置给 listview

//解析完毕 ,适配 listview
		MovieListAdapter adapter=new MovieListAdapter(list);
		ove_list.setAdapter(adapter);

    这里的实例在: 点击打开这个实例


6.OnItenClickListener  

  通过listview对象 的 getItemAtPostion() 取得 Item 的值

	
	/**
	 * Item 点击事件
	 * @author yuan
	 *
	 */
	class ListItemOnClickListener implements OnItemClickListener{

		@Override
		public void onItemClick(AdapterView<?> parent, View view, int position,
				long id) {
			//可以取得ListView 的 Item里的值
		  String str=listview1.getItemAtPosition(position).toString();
		  tv_frist.setText(str);
		}
	}
	

7.ListScrollListener

    滑动可以监听到 滑动状态,从而进行 加载数据;

/**
	 * 滑动监听
	 * @author yuan
	 *
	 */
	class ListScrollListener implements OnScrollListener{

		@Override
		public void onScrollStateChanged(AbsListView view, int scrollState) {
			// 滑动状态测试
			switch (scrollState) {
			case SCROLL_STATE_FLING:
				tv_frist.setText("手指离开,还在滑动");
			        for(int i=20;i<40;i++){
			        	Map<String,String> map=new HashMap<String, String>();
			        	map.put("yuan","温县"+i);
			        	map.put("ming","原明卓"+i);
			        	maps.add(map);
			        }
			        //通知simpleAdapter 修改数据
			        simpleAdapter.notifyDataSetChanged();
				break;
	         case SCROLL_STATE_IDLE:
	        	 tv_frist.setText("停止滑动了");
				break;
	         case SCROLL_STATE_TOUCH_SCROLL:
	        	 tv_frist.setText("手指还在屏幕上,正在滑动");
					break;
			default:
				 tv_frist.setText("不滑动了");
				break;
			}
			
		}

		@Override
		public void onScroll(AbsListView view, int firstVisibleItem,
				int visibleItemCount, int totalItemCount) {
			// 滑动
			
		}
		
	}


8.下拉刷新基本思路

    (1)判断下拉刷新的状态

    (2)显示底层布局和 滚动条

    (3)加载显示数据



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值