zoukankan      html  css  js  c++  java
  • 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>
  • 相关阅读:
    NOIP普及组2003经验总结
    Day6上午 DP练习题
    Day4 图论
    Day3 数据结构
    使用ettercap进行dns欺骗和获取目标浏览的图片
    flask入门
    攻防世界-web-unserialize3
    数据结构课设作业-----飞机订票系统
    bugku NaNNaNNaNNaN-Batman
    it's a test
  • 原文地址:https://www.cnblogs.com/skyblue/p/2158314.html
Copyright © 2011-2022 走看看