ListView

原创 2015年11月20日 22:44:35

ListView

目录

ArrayAdapter

SimpleAdapter

SimpleCursorAdapter

ListView的使用是遵循MVC架构的

M:  模型层---用户要查看的内容-----数据源
V:  视图层---用户可以看到的界面---listview
C:  控制层---将M和V绑在一起-------adapter
  • 一般数据源都是用arraylist之类动态数组;

  • 至于ListView中的视图层则是用两个layout下的xml文件实现的

    其中一个(与activity绑定的)只需在布局文件中加入ListView节点;
    另一个则是用来进行ListView控件中的布局,该布局会在适配器中与数据源绑定

  • Adapter,根据ListView要实现的功能,适配器分为三类:ArrayAdapter,SimpleAdapter和SimpleCursorAdapter。其中SimpleAdapter有最好的扩充性,有最好的使用效果;

ArrayAdapter 只能生成一行。而SimpleCursorAdapter则是simpleAdapter与数据库的结合,可以显示出数据库中内容。

ArrayAdapter

activity代码
package com.example.listview;
import android.app.Activity;
import android.os.Bundle;
import android.widget.ArrayAdapter;
import android.widget.ListView;

public class MainActivity extends Activity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    ListView listview = (ListView) findViewById(R.id.lv);

    String[] cities = new String[]{"上海","北京","南京","武汉","东京"};

    ArrayAdapter myAdapter = new ArrayAdapter(this,android.R.layout.simple_list_item_1,cities);
    //simple_list_item_1是系统自带的一个list表单      
    listview.setAdapter(myAdapter);
    }
}
####layout代码
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".MainActivity" >

<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="城市" />

<ListView 
    android:id="@+id/lv"
    android:layout_width="fill_parent"
    android:layout_height="match_parent"/>"

</LinearLayout>

SimpleAdapter详解:

  • activity:

    package com.example.listview;
    
    import java.util.ArrayList;
    import java.util.HashMap;
    
    import android.app.Activity;
    import android.os.Bundle;
    import android.widget.ListAdapter;
    import android.widget.ListView;
    import android.widget.SimpleAdapter;
    
    public class MainActivity extends Activity {
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    ListView listview = (ListView) findViewById(R.id.lv);
    ArrayList<HashMap<String,Object>> arraylist = new ArrayList<HashMap<String,Object>>();
    
    HashMap<String,Object> map = new HashMap<String ,Object>();
    map.put("城市","北京");
    map.put("国家", "中国");
    map.put("照片",R.drawable.ic_launcher);
    arraylist.add(map);
    
    map = null;
    map = new HashMap<String , Object>();
    map.put("城市","冲绳");
    map.put("国家", "日本");
    map.put("照片",R.drawable.ic_launcher);
    arraylist.add(map);
    
    map=null;
    map = new HashMap<String , Object>();
    map.put("城市","首尔");
    map.put("国家", "韩国");
    map.put("照片",R.drawable.ic_launcher);
    arraylist.add(map);
    
    map=null;
    map = new HashMap<String , Object>();
    map.put("城市","平壤");
    map.put("国家", "朝鲜");
    map.put("照片",R.drawable.ic_launcher);
    arraylist.add(map);
    
    //生成适配器的Item和动态数组对应的元素  
    SimpleAdapter simpleAdapter = new SimpleAdapter(this, arraylist,//数据源 R.layout.listv, //Listv的XML实现
    //(*****)动态数组与ImageItem对应的子项 
            new String[]{"图片","国家","城市"}, 
            new int[]{R.id.iv_photo,R.id.tv_country,R.id.tv_city});
    //添加并且显示  
    listview.setAdapter(simpleAdapter);
    }
    

    }

  • activity

    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
     android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context=".MainActivity" >
    
    <TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="城市" />
    
    <ListView 
    android:id="@+id/lv"
    android:layout_width="fill_parent"
    android:layout_height="match_parent"/>"
    
    </LinearLayout>
    
  • listv

    <?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:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:id="@+id/iv.photo"/>
    
    <LinearLayout 
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:orientation="vertical">
    
    <TextView android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/tv_country"/>
    
    <TextView android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/tv_city"/>
     </LinearLayout>
    

由代码可知,ListView的绑定使用步骤:

1.绑定layout里的listview组件

2.将要输入listview的数据,加入到生成的动态数组中

3.用adapter将动态数组与listview绑定(即上面说的定义了Listview组件布局的xml),各参数含义见上面代码

4.将该adapter添加并显示到页面布局:list.setAdapter(listItemAdapter);


SimpleCursorAdapter

由名字就知道,这是SimpleAdapter的一个增强型。再看cursor又能知道,这种增强是基于数据库的。

    package com.example.listview;


    import android.app.Activity;
    import android.content.ContentResolver;
    import android.database.Cursor;
    import android.os.Bundle;
    import android.provider.ContactsContract;
    import android.provider.ContactsContract.PhoneLookup;
    import android.support.v4.widget.SimpleCursorAdapter;
    import android.widget.ListAdapter;
    import android.widget.ListView;

public class MainActivity extends Activity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    ListView listview = (ListView) findViewById(R.id.lv);
    ContentResolver cr = getContentResolver();
    Cursor cursor = cr.query( ContactsContract.Contacts.CONTENT_URI,null, null, null, null);
    if(cursor !=null){
        startManagingCursor(cursor);
    }

    ListAdapter listAdapter = new SimpleCursorAdapter(this, 
            android.R.layout.simple_list_item_1, cursor,
            new String[] { PhoneLookup.DISPLAY_NAME },
            new int[] { android.R.id.text1 });
    listview.setAdapter(listAdapter);
    stopManagingCursor(cursor);
    }

}

这只是简单的获取联系人姓名的例子而已,当然,为了能够运行该例子,我们需要添加下面的权限:

 <uses-permission android:name="android.permission.READ_CONTACTS" />

这里有一个方法很值得我们注意:startManagingCursor()。它的使用是基于这样的前提:游标结果集里有很多的数据记录,像是通讯录这样的结果集,肯定符合要求。使用该方法的目标主要是把获取的Cursor对象交给Activity管理,这样Cursor的生命周期就和Activity自动同步了,这样在Activity结束的时候就能自动结束Cursor的使用。使用前最好是先判断Cursor是否为空,以免发生错误,而且使用后也要用stopManagingCursor()方法来停掉它。

SimpleCursorAdapter除了数据来源指定是数据库之外,就和SimpleAdapter的用法几乎一样了。

相关文章推荐

Android锁定指定列的listview

  • 2017年11月20日 15:44
  • 630KB
  • 下载

Android学QQ聊天列表展示ListView

Android学QQ聊天列表展示ListView稍微修改下实现的,比完全copy感觉爽多了布局文件:activity_main.xml...
  • xyzz609
  • xyzz609
  • 2016年07月15日 11:30
  • 1237

ListView案例

  • 2017年09月09日 23:15
  • 117KB
  • 下载

ScrollView+双Listview

  • 2017年10月26日 16:17
  • 2.19MB
  • 下载

ListView 的用法

一、ListView类           1、常用的基本属性:         (1)FullRowSelect:设置是否行选择模式。(默认为false) 提示:只有在Details视图该属性才...

android listview 股东列头

  • 2016年06月28日 13:19
  • 1.85MB
  • 下载

listView 异步加载图片

  • 2016年01月29日 12:26
  • 1.7MB
  • 下载

Android ListView监听滑动事件的方法

ListView的主要有两种滑动事件监听方法,OnTouchListener和OnScrollListener1.OnTouchListenerOnTouchListener方法来自View中的监听事...

ListView下拉刷新

  • 2016年04月14日 14:06
  • 1.92MB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:ListView
举报原因:
原因补充:

(最多只允许输入30个字)