Android控件学习笔记之 ListView

在android开发中ListView是比较常用的组件,它以列表的形式展示具体内容,并且能够根据数据的长度自适应显示。
 
列表的显示需要三个元素:

1.ListVeiw:用来展示列表的View。

2.适配器:用来把数据映射到ListView上的中介。

3.数据:具体的将被映射的字符串、图片,或者基本组件。

 

根据列表的适配器类型,列表分为三种,ArrayAdapter,SimpleAdapter和SimpleCursorAdapter
其中以ArrayAdapter最为简单,只能展示一行字。SimpleAdapter有最好的扩充性,可以自定义出各种效果。 SimpleCursorAdapter可以认为是SimpleAdapter对数据库的简单结合,可以方面的把数据库的内容以列表的形式展示出来。
ArrayAdapter参数说明

ArrayAdapter(数组适配器)一般用于显示一行文本信息,所以比较容易。

构造函数

ArrayAdapter(Context context, int textViewResourceId)

ArrayAdapter(Context context, int resource, int textViewResourceId)

ArrayAdapter(Context context, int textViewResourceId, T[] objects)

ArrayAdapter(Context context, int resource, int textViewResourceId, T[] objects)

ArrayAdapter(Context context, int textViewResourceId, List<T> objects)

ArrayAdapter(Context context, int resource, int textViewResourceId, List<T> objects)

 

    参数 

 

    context  运行着的视图的上下文。
    textViewResourceId  一个包含了TextView的布局xml文件的id。
    resource  ListView中Item项的复杂布局xml文件。
    objects  给ArrayAdapter提供数据的数组。

 

SimpleAdapter参数说明:

public SimpleAdapter (Context context, List<? extends Map<String, ?>> data, int resource, String[] from, int[] to)

构造函数
    参数
    context   关联SimpleAdapter运行着的视图的上下文。
    data        一个Map的列表。在列表中的每个条目对应列表中的一行,应该包含所有在from中指定的条目
    resource              一个定义列表项目的视图布局的资源唯一标识。布局文件将至少应包含哪些在to中定义了的名称。
    from       一个将被添加到Map上关联每一个项目的列名称的列表
    to    应该在参数from显示列的视图。这些应该全是TextView。在列表中最初的N视图是从参数from中最初的N列获取的值。

SimpleAdapter 可以定义各种各样的布局出来,可以放上ImageView(图片),还可以放上Button(按钮),CheckBox(复选框)等等。下面的代码都直接继承了ListActivity,如果程序的窗口仅仅为了显示一个列表,则可以直接让Activity继承ListActivity来实现,ListActivity的子类无需调用setContentView()来显示某个页面,而是可以直接传入一个Adapter,ListActivity的子类就呈现出一个列表。

SimpleCursorAdapter

SimpleCurosrAdapter 是一个将 Cursor 中的 columns 与在 XML 文件中定义的 TextViews 或 ImageViews 进行匹配的简易 adapter。你可以指定选择 Cursor 中的哪些 columns、用哪些 views 来显示这些 columns 、以及指定定义这些 views 的 xml 文件。 也就是说,SimpleCursorAdapter 允许绑定一个 Cursor 的 columns 到 ListView 上,并使用自定义的 layout 显示 List中的每个项目。可以使用 SimpleCursorAdapter 作为中间桥梁,将从 sqlite 数据库中查询出来的数据直接显示到 ListView 中。



public SimpleCursorAdapter(Context context, int layout, Cursor c, String[] from, int[] to)

 

构造函数
    参数

  Context context  这个与 SimpleListItemFactory 相关的 ListView 所处运行上下文(context)。也就是这个 ListView 所在的 Activity。

  layout  显示 list item 的 布局文件。这个 layout 文件中至少要包含在 "to" 参数中命名的 views。

  c  数据库的光标( Cursor )。如果 cursor 无效,则该参数可以为 null

  from  指定 column 中的哪些列的数据将绑定(显示)到 UI 中。如果 cursor 无效, 则该参数可为 null。

  to  指定用于显示 "from" 参数指定的数据列表的 views。 这些 views 必须都是 TextViews。 "from" 参数的前 N 个值(valus)和 "to" 参数的前 N 个 views 是一一对应的关系。如果 cursor 无效,则该参数可为 null。

 

 

 

SimpleAdapter列子

 

 

Main.java

 

package  cn.test;

import  android.app.Activity;
import  android.content.Intent;
import  android.os.Bundle;
import  android.util.Log;
import  android.view.View;
import  android.widget.Button;

public   class  Main  extends  Activity {
    
private  Button btn_viewItemAndText;
    @Override
    
public   void  onCreate(Bundle savedInstanceState) {
        
super .onCreate(savedInstanceState);
        setContentView(R.layout.main);
        initControl();
        setControlListener();
    }
    
    
/**
     * 初始化控件
     
*/
    
private   void  initControl(){
        btn_viewItemAndText
= (Button)findViewById(R.id.btn_viewItemAndText);
    }
    
    
/**
     * 增加控件监听
     
*/
    
private   void  setControlListener(){
        btn_viewItemAndText.setOnClickListener(onClickViewItemAndTextListener);
    }
    
    
/**
     * 图文列表按钮事件
     
*/
    
private  View.OnClickListener onClickViewItemAndTextListener  =   new  View.OnClickListener() {
        @Override
        
public   void  onClick(View v) {
            Log.v(
" OnClick  " " btn_viewItemAndText " );
            Intent intent 
=   new  Intent(Main. this , ItemAndTextListView. class );
            startActivity(intent);
        }
    };
}

 

 

 

 

ItemAndTextListView.java

 

package  cn.test;

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

import  android.app.ListActivity;
import  android.os.Bundle;
import  android.widget.SimpleAdapter;

public   class  ItemAndTextListView  extends  ListActivity {
    @Override
    
public   void  onCreate(Bundle savedInstanceState) {
        
super .onCreate(savedInstanceState);

        SimpleAdapter adapter 
=   new  SimpleAdapter( this ,getData(),R.layout.listitem,
                
new  String[]{ " ItemTitle " , " ItemText " },
                
new   int []{R.id.ItemTitle,R.id.ItemText});
        setListAdapter(adapter);
    }

    
private  List < Map < String, Object >>  getData() {
        List
< Map < String, Object >>  list  =   new  ArrayList < Map < String, Object >> ();

        Map
< String, Object >  map  =   new  HashMap < String, Object > ();
        map.put(
" ItemTitle " " 项目标题1 " );
        map.put(
" ItemText " " 项目文字   1 " );
    
        list.add(map);

        map 
=   new  HashMap < String, Object > ();
        map.put(
" ItemTitle " " 项目标题2 " );
        map.put(
" ItemText " " 项目文字   2 " );

        list.add(map);

        map 
=   new  HashMap < String, Object > ();
        map.put(
" ItemTitle " " 项目标题3 " );
        map.put(
" ItemText " " 项目文字   3 " );
        
        list.add(map);
        
        
return  list;
    }
}

 

main.xml

 

<? xml version="1.0" encoding="utf-8" ?>
< LinearLayout  xmlns:android ="http://schemas.android.com/apk/res/android"
    android:orientation
="vertical"
    android:layout_width
="fill_parent"
    android:layout_height
="fill_parent"
    
>
< TextView  
    
android:layout_width ="fill_parent"  
    android:layout_height
="wrap_content"  
    android:text
="@string/hello"
    
/>
< Button  android:layout_height ="wrap_content"  android:id ="@+id/btn_viewItemAndText"  android:text ="标题加文字"  android:layout_width ="match_parent" ></ Button >

</ LinearLayout >

 

 

 

listitem.xml

 
<? xml version="1.0" encoding="utf-8" ?>
< LinearLayout  xmlns:android ="http://schemas.android.com/apk/res/android"
    android:orientation
="horizontal"  android:layout_width ="fill_parent"
    android:layout_height
="fill_parent" >
    
< LinearLayout  android:orientation ="vertical"
        android:layout_width
="wrap_content"  
        android:layout_height
="wrap_content" >
       
< TextView   
               
android:layout_height ="wrap_content"    
               android:layout_width
="fill_parent"    
               android:id
="@+id/ItemTitle"    
               android:textSize
="20dip" >   
       
</ TextView >   
       
< TextView   
               
android:layout_height ="wrap_content"    
               android:layout_width
="fill_parent"    
               android:id
="@+id/ItemText" >   
       
</ TextView >  
   
</ LinearLayout >
</ LinearLayout >

 

 

AndroidManifest.xml

 

<? xml version="1.0" encoding="utf-8" ?>
< manifest  xmlns:android ="http://schemas.android.com/apk/res/android"
      package
="cn.test"
      android:versionCode
="1"
      android:versionName
="1.0" >
    
< uses-sdk  android:minSdkVersion ="8"   />

    
< application  android:icon ="@drawable/icon"  android:label ="@string/app_name" >
        
< activity  android:name =".Main"
                  android:label
="@string/app_name" >
            
< intent-filter >
                
< action  android:name ="android.intent.action.MAIN"   />
                
< category  android:name ="android.intent.category.LAUNCHER"   />
            
</ intent-filter >
        
</ activity >
 
          
< activity  android:name =".ItemAndTextListView"
                  android:label
="@string/app_name" >
            
< intent-filter >
                
< action  android:name ="android.intent.action.itemAndTextListView"   />
                
< category  android:name ="android.intent.category.DEFAULT"   />
            
</ intent-filter >
        
</ activity >
    
</ application >
</ manifest >

 

 

 

你可能感兴趣的:(android控件)