• android-ListView控件的使用


    一、深刻理解ListView

     1、职责:将数据填充到布局、响应用户操作

     2、ListView的实现需要:布局、数据源、适配器

     3、常见适配器:

      ArrayAdapter<T>  用来绑定一个数组,支持泛型

      SimpleAdapter  用来绑定在xml中定义的控件对应的数据

       SimpleCursorAdapter 用来绑定游标得到的数据

      BaseAdapter   通用的基础适配器

    二、数据适配器作用:

        将复杂的数据填充在指定界面上(数组、集合、链表、数据库...),即连接数据源和视图界面的桥梁。

      (1)数组适配器:ArrayAdapter

        用于绑定格式单一的数据(数据源:数组、集合)

         2)简单适配器:SimpleAadpter

        用于绑定格式复杂的数据(数据源:只能是特定泛型的集合)

     

        实现过程:新建适配器、添加数据源到适配器、绑定适配器;

    MainActivity文件:

    package com.example.mylistview;

    import java.util.ArrayList;
    import java.util.HashMap;
    import java.util.List;
    import java.util.Map;

    import android.support.v7.app.ActionBarActivity;
    import android.os.Bundle;
    import android.widget.ListView;
    import android.widget.SimpleAdapter;


    public class MainActivity extends ActionBarActivity {

     private ListView listView;
     //private ArrayAdapter<String> arr_adapter;
     private SimpleAdapter simp_adapter;
     
     private List<Map<String,Object>> dataList;
     
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_menu);
           
            listView=(ListView) findViewById(R.id.listView);
            /*
             * 数组适配器:
             * 0、生成一个数据源
             * 1、新建一个适配器并加载数据源
             *   数组适配器三个参数:
             *    上下文、当前ListView加载的列表项所对应的布局文件、数据源
             * 2、绑定适配器
             *
             * */
           
            //String []arr_data={"马轩","选吗","马车","活吗","龙马","天马","赵称","赵晨","真唱","注册","向日葵","徐荣凯","谢荣康"};
            //arr_adapter=new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, arr_data);
            //listView.setAdapter(arr_adapter);
           
            /*
             * 简单适配器:
             *  参数:上下文
             *
             *   数据源List<? extends Map<String,?>>  一个map所组成的list集合,
             *    每一个map对应listView列表中的一行
             *    每一个Map中的键必须包含所有在from中所指定的键
             *   
             *   列表项的布局文件  
             *
             *   记录map中的键名
             *
             *   绑定数据视图中的id,与from对应
             * */
           
            dataList=new ArrayList<Map<String,Object>>();
            simp_adapter=new SimpleAdapter(this, this.getData(), R.layout.activity_menusimp, new String[]{"pic","text"}, new int[]{R.id.pic,R.id.text});
           
            listView.setAdapter(simp_adapter);
           
           
        }
       
        private List<Map<String,Object>> getData(){
         
         for (int i = 0; i < 20; i++) {
       
          Map<String,Object> map=new HashMap<String, Object>();
          map.put("pic", R.drawable.ic_logo);
          map.put("text", "谢荣康");
          dataList.add(map);
      }
         return dataList;
        }
    }

    activity_menu.xml文件:

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

        <ListView
            android:id="@+id/listView"
            android:layout_width="match_parent"
            android:layout_height="wrap_content" >
        </ListView>

    </LinearLayout>

     activity_menusimp.xml文件

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

        <ImageView
            android:id="@+id/pic"
            android:layout_width="86dp"
            android:layout_height="100dp"
            android:layout_marginLeft="15dp"
            android:src="@drawable/ic_logo" />

        <TextView
            android:id="@+id/text"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="demo"
            android:textColor="#000000"
            android:textSize="20sp" />
       
    </LinearLayout>

     

     

     

     

    三、熟练运用两种监听器:OnScrollListenerOnItemClickListener

    监听器:程序和用户/系统交互的桥梁

    实现过程:视图直接设置监听器,在相关的实现方法中补充需要的代码即可。

    1、OnScrollListener --- 监视滚动的变化,用于视图在滚动中加载数据

    实现的方法:

    onScrollStateChanged(AbsListView view, int scrollState){}

    onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount)

    第三个参数:

    SCROLL_STATE_FLING:离开时由于用力划了一下还在滚动

    SCROLL_STATE_IDLE:视图已经停止滑动

    SCROLL_STATE_TOUCH_SCROLL:正在滑动,手指木有离开屏幕

    //notifyDataSetChanged()---动态更新视图中所包含的数据

    2、OnItemClickListener --- 处理视图中单个条目的点击事件

    实现的方法:

    onItemClick(AdapterView<?> parent, View view, int position,  long id){

      // 获取列表项位置,列表项从0开始

      listView.getItemAtPosition(position);

    }

  • 相关阅读:
    Sql Server数据库汉字按字母、笔划、拼音首字母、排序
    产生一个int数组,长度为100,并向其中随机插入1100,并且不能重复
    使用DropDownExtender
    一些关于中文乱码问题的一些解决方案和经验和大家分享!
    (译)Silverlight教程第一部分: 使用Silverlight 2 和 VS 2008创建“Hello World”程序
    使用CalendarExtender
    .NET实现中英文验证码
    使用Accordion
    使用AlwaysVisibleControlExtender
    Javascript经典窍门
  • 原文地址:https://www.cnblogs.com/iamkk/p/5912286.html
Copyright © 2020-2023  润新知