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

来源:互联网 发布:橡皮砖淘宝店铺 编辑:程序博客网 时间:2024/06/04 19:12

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;}@Overridepublic int getCount() {return mlist.size();}@Overridepublic Object getItem(int position) {return mlist.get(position);}@Overridepublic long getItemId(int position) {return position;}@Overridepublic 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());// 图片监听 (默认图片,错误图片) 和 imageViewImageListener imageListener=ImageLoader.getImageListener(imageView,R.drawable.ic_launcher,R.drawable.ic_launcher);//加载图片 后面可以设置 图片的大小缩放imageLoader.get(VolleyHttpPath.getBasicPath()+"/"+pic,imageListener,0,0);}}

    将adapter 设置给 listview

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

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


6.OnItenClickListener  

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

/** * Item 点击事件 * @author yuan * */class ListItemOnClickListener implements OnItemClickListener{@Overridepublic 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{@Overridepublic 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;}}@Overridepublic void onScroll(AbsListView view, int firstVisibleItem,int visibleItemCount, int totalItemCount) {// 滑动}}


8.下拉刷新基本思路

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

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

    (3)加载显示数据



0 0
原创粉丝点击