一、深刻理解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>

 

 

 

 

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

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

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

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

}

android-ListView控件的使用的更多相关文章

  1. Xamarin Android ListView 控件使用

    在项目中通常用到了ListView控件,示例如下: create the listitem class ,eg; public class ColorItem { public string Colo ...

  2. 如何清空android ListView控件的内容

    第一种方法: listView.setAdapter(null); 第二种方法: listAdapter.clear(); listAdapter.notifyDataSetChanged() ; 满 ...

  3. Android中ListView控件的使用

    Android中ListView控件的使用 ListView展示数据的原理 在Android中,其实ListView就相当于web中的jsp,Adapter是适配器,它就相当于web中的Servlet ...

  4. Android中ListView 控件与 Adapter 适配器如何使用?

    一个android应用的成功与否,其界面设计至关重要.为了更好的进行android ui设计,我们常常需要借助一些控件和适配器.今天小编在android培训网站上搜罗了一些有关ListView 控件与 ...

  5. android中ListView控件&&onItemClick事件中获取listView传递的数据

    http://blog.csdn.net/aben_2005/article/details/6592205 本文转载自:android中ListView控件&&onItemClick ...

  6. Android:控件ListView列表项与适配器结合使用

    Listview是用来展示一些重复性的数据用的,比如一些列表集合数据展示到手机,需要适配器作为载体获取数据,最后将数据填充到布局. ListView里面的每个子项Item可以使一个字符串,也可以是一个 ...

  7. android中ListView控件

    今天学习了ListView控件和页面跳转,下面大致介绍下: 第一步:创建显示内容的文件vlist.xml: <?xml version="1.0" encoding=&quo ...

  8. 【Android基础】listview控件的使用(4)-----自定义布局的listview的使用

    前面我介绍了listview控件的不同用法,但是这些用法在实际的开发项目中是不足以满足需求的,因为前面的几种用法只能简单的显示文本信息,而且布局都比较单一,很难做出复杂的结果,在实际的开发项目中,90 ...

  9. 【Android基础】listview控件的使用(3)------Map与SimpleAdapter组成的多显示条目的Listview

    前面介绍的两种listview的使用都是最基础的,所以有很大的局限性,比如只能在一个item(即每一行的条目)中显示一个文本信息,这一篇我将介绍Map与SimpleAdapter组成的多显示条目的Li ...

  10. 【Android基础】listview控件的使用(2)-------继承自ListActivity的普通listview

    由于listview在android控件中的重要性,所以android为我们直接封装了一个类ListviewActivity,直接将listview封装在了activity之中,在本篇中,我将介绍在L ...

随机推荐

  1. 发送http请求get方法

    //获取网页html NSURL* url = [NSURL URLWithString:@"http://www.baidu.com"]; NSMutableURLRequest ...

  2. 遍历进程活动链表(ActiveProcessLinks)、DKOM隐藏进程

    1.EPROCESS结构体 EPROCESS块来表示.EPROCESS块中不仅包含了进程相关了很多信息,还有很多指向其他相关结构数据结构的指针.例如每一个进程里面都至少有一个ETHREAD块表示的线程 ...

  3. 在Activity中响应ListView内部按钮的点击事件

    最近交流群里面有人问到一个问题:如何在Activity中响应ListView内部按钮的点击事件,不要在Adapter中响应? 对于这个问题,我最初给他的解答是,在Adapter中定义一个回调接口,在A ...

  4. 【转】saiku与kylin整合备忘录

    http://blog.csdn.net/freefishly/article/details/51759133 为什么要整合? Kylin是通过离线预计算将Hive中事实表的各组合维度的值存储在Hb ...

  5. sqoop与mysql之间中文乱码

    sudo -u hive sqoop export --connect "jdbc:mysql://192.168.22.201/LauncherDB?useUnicode=true& ...

  6. 让一个div在不同的显示器中永远居中

    <!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8&quo ...

  7. 利用K-means聚类分类,进行特征学习

    这只是老师安排的一个实验,准备过程中遇到各种问题,现在贴出来供大家参考,是Andrew Ng参与的研究, 论文依据如下,第二篇是一篇相关的论文, Learning Feature Representa ...

  8. Codeforces Round #346 (Div. 2)

    前三题水 A #include <bits/stdc++.h> typedef long long ll; const int N = 1e5 + 5; int main() { int ...

  9. DP ZOJ 2745 01-K Code

    题目传送门 题意:要求任意连续子序列中0和1的数量差不超过k的方案数 分析:想好状态其实不难.dp[i][j][k]表示考虑前i长度,后缀中最大的 sum(0) - sum(1) = j, sum ( ...

  10. ArcGIS 点到直线的距离

    /****点到直线的距离*** * 过点(x1,y1)和点(x2,y2)的直线方程为:KX -Y + (x2y1 - x1y2)/(x2-x1) = 0 * 设直线斜率为K = (y2-y1)/(x2 ...