zoukankan      html  css  js  c++  java
  • Android之ListActivity:布局与数据绑定

    Android中的列表,当然也可以用ListView来完成所需要的功能,用法是一样的。

    废话不说,来关键的。

    LiveActivity本身继承了关于List操作的众多接口,我们可以方便的重写这些操作中需要的方法来实现自己需要的功能。

    如果要用ListActivity,则 Activity的Layout文件中必须包括一个(只能一个)ListView,且ListView的id= "@id/android:list"。

    如下代码,一个标准的ListActivity Layout文件:

    <?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"
    android:paddingLeft="8dp"
    android:paddingRight="8dp">

    <ListView android:id="@id/android:list"
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent"
    android:background="#00FF00"
    android:layout_weight="1"
    android:drawSelectorOnTop="false"/>

    <TextView id="@id/android:empty"
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent"
    android:background="#FF0000"
    android:text="No data"/>
    </LinearLayout>

    请注意 ListView与TextView的id。前面说了,ListView的Id为固定不变的,为”@./idandroid:list”,ListActivity会根据id自动查找ListView引用;但如果当ListView中没有值而又想提示一句话时,那么用于指定显示提示信息的TextView的id 必须为”"@id/android:empty",提示的信息可以通过android:text进行指定。

    OK,关于如何布局说完了,那么如何给List绑定值,并进行操作呢?

    首先我们需要确实的是,ListView的布局也完成了,并通过调用setContentView(…)进行了绑定,但直到现在我们还没有确定ListView中的第一行显示的格式是什么,是直接显示文字还是要“图文并茂”的显示。

    Android系统为我们提供了多种模板进行选择(android.R.layout),如

    Ø Simple_list_item_1 每项有一个TextView

    Ø Simple_list_item_2 每项有两个TextView

    Ø Simple_list_item_checked CheckView的项

    Ø Simple_list_item_multiple_choise 每项有一个TextView并可以多选

    Ø Simple_list_item_single_choice 每项有一个TextView,但只能进行单选。

     

    但然,如果以上项模板还无法满足你的要求,那只能自定义模板了(相当简单,就是定义一个layout布局)。如果你做的asp.net的开发的话,是否对dataList控件有印象呢。如果对DataList有印象,那么理解ListView也就相当的简单了。

    自定义模板可以根据自己的需要定义成任意的格式,包括图片、方案及其他可显示的View,不用多说,自己定义就好了,关键是如果使用并进行模板的绑定。

    如何要对ListView进行数据绑定,必须使用到一个接口:Adapter

    其中最经常与ListView进行配合使用的有ArrayAdapter CursorAdapterSimpleAdapter等。

    从名称可以看出ArrayAdapter使用的是一个ArrayAdapter做为数据源,SimpleCursorAdapter使用的是一个Cursor使用数据源,都比较容易理解,那么如何使用SimpleAdapter作为数据的适配器呢。Ok,从易到难。

    ArrayAdapter:

     

    String[] data = { "Item1", "Item2",

            "Item3", "Item4", "Item5" };

    listView.setAdapter(new ArrayAdapter<String>(this,

         android.R.layout.simple_list_item_single_choice, data));  

     

    SimpleCursorAdapter:

    //从数据库中查询Cursor

       cursor = adapter.getAllNotes();

       startManagingCursor(cursor);

      

       //设置要显示的数据源中的列名(需要包含在cursor中)

       String[] from = new String[] { DiaryDbAdapter.KEY_COLUMN_TITLE,

                    DiaryDbAdapter.KEY_COLUMN_CREATEED };

      

       //显示的View(自定义模板中的View

       int[] to = new int[] { R.id.txtRowTitle, R.id.txtRowCreateed };

       //绑定

       SimpleCursorAdapter notes = new SimpleCursorAdapter(this,

                    R.layout.diaryrow, cursor, from, to);

       setListAdapter(notes);

    SimpleAdapter:

       SimpleAdapter将一个List做为数据源,可以让ListView进行更加个性化的显示。而List中的第一项是个Map<String,?>(用到泛型),其中Map中的每项将与ListView中的每项进行一一对应绑定。Ok,看一下构造:

       SimpleAdapter(Context context,List<? Extends Map<String,?>> data,int resource,String [] form, int [] to);

    ² Context:当前上下文,一般把Activity.this传递进行。

    ² Data: 数据源。

    ² Resource: 自定义的layout模板资源,可以用 R.layout.xxx获取引用。

    ² Form: 定义ListView中的每一项数据索引,索引来自于Map<String,?>,即指定要显示的内容。

    ² To:View数组,在ListView模板中的定义View,Form中需要一一对应。

    事例代码:

          List<Hashtable<String, Object>> listContent

    new ArrayList<Hashtable<String, Object>>();

     

          for (int i = 0; i < deviceList.size(); i++) {

             Hashtable<String, Object> table

    new Hashtable<String, Object>();

             table.put("name"deviceList.get(i).Name);

             table.put("address"deviceList.get(i).Address);

             table.put("type"deviceList.get(i).Type + "");  

     

             listContent.add(table);

          }

     

          adapter = new SimpleAdapter(HeartActivity.this,

    listContent, R.layout.child, //自定义的layout

    new String[] { "name""address" },

    new int[] {R.id.txtDeviceName, R.id.txtDeviceAddress });

     

          setListAdapter(adapter);

    以上代码使用了Hashtable做为一个Map,并添加到一个List<Hashtable<String, Object>>当中。

    之后new一个SimpleAdapter,注意SimpleAdapter是如何生成的。


    sourceurl:http://blog.csdn.net/prince58/article/details/6362284

  • 相关阅读:
    JavaScript中trim 方法实现
    面向对象设计的SOLID原则
    对项目的了解差点儿为零?怎样高速上手一个新项目
    计算一个序列的移动平均线序列的模板,可实现均线的均线
    HTML5学习笔记简明版(10):废弃的元素和属性
    Using Swift with Cocoa and Objective-C下载
    实战Java虚拟机之中的一个“堆溢出处理”
    Delphi导出数据的多种方法
    Delphi+DBGrid导出Excel
    delphi try except语句 和 try finally语句用法以及区别
  • 原文地址:https://www.cnblogs.com/hnrainll/p/2311307.html
Copyright © 2011-2022 走看看