Android之ListActivity:布局与数据绑定

来源:互联网 发布:关键词排名优化技巧 编辑:程序博客网 时间:2024/05/22 08:06

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

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

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

如何给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,但只能进行单选。

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

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

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

从名称可以看出ArrayAdapter使用的是一个ArrayAdapter做为数据源,SimpleCursorAdapter使用的是一个Cursor使用数据源,如何使用SimpleAdapter作为数据的适配器呢。

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>>当中。

原创粉丝点击