Android之ListActivity 布局与数据绑定

简介: Android之ListActivity 布局与数据绑定

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

废话不说,来关键的。

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

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

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

<?xml version="1.0"encoding="utf-8"?>
<LinearLayoutxmlns:android="https://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">
<ListViewandroid:id="@id/android:list"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="#00FF00"
android:layout_weight="1"
android:drawSelectorOnTop="false"/>
<TextViewid="@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:ost”,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、CursorAdapter及SimpleAdapter等。

从名称可以看出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
=newArrayList<Hashtable<String, Object>>();
     for(inti = 0; i <deviceList.size(); i++) {
         Hashtable<String, Object> table
=newHashtable<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=newSimpleAdapter(HeartActivity.this,
listContent, R.layout.child, //自定义的layout
newString[] {"name","address"},
newint[] {R.id.txtDeviceName, R.id.txtDeviceAddress});
      setListAdapter(adapter);

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

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

相关文章
|
5月前
|
XML Android开发 数据安全/隐私保护
10. 【Android教程】网格布局 GridLayout
10. 【Android教程】网格布局 GridLayout
306 1
|
1月前
|
ARouter Android开发
Android不同module布局文件重名被覆盖
Android不同module布局文件重名被覆盖
|
3月前
|
移动开发 监控 前端开发
构建高效Android应用:从优化布局到提升性能
【7月更文挑战第60天】在移动开发领域,一个流畅且响应迅速的应用程序是用户留存的关键。针对Android平台,开发者面临的挑战包括多样化的设备兼容性和性能优化。本文将深入探讨如何通过改进布局设计、内存管理和多线程处理来构建高效的Android应用。我们将剖析布局优化的细节,并讨论最新的Android性能提升策略,以帮助开发者创建更快速、更流畅的用户体验。
66 10
|
5月前
|
Android开发
08. 【Android教程】相对布局 RelativeLayout
08. 【Android教程】相对布局 RelativeLayout
76 0
|
1月前
|
ARouter Android开发
Android不同module布局文件重名被覆盖
Android不同module布局文件重名被覆盖
109 0
|
3月前
|
编解码 Android开发
【Android Studio】使用UI工具绘制,ConstraintLayout 限制性布局,快速上手
本文介绍了Android Studio中使用ConstraintLayout布局的方法,通过创建布局文件、设置控件约束等步骤,快速上手UI设计,并提供了一个TV Launcher界面布局的绘制示例。
56 1
|
4月前
|
Android开发 Kotlin
kotlin开发安卓app,如何让布局自适应系统传统导航和全面屏导航
使用`navigationBarsPadding()`修饰符实现界面自适应,自动处理底部导航栏的内边距,再加上`.padding(bottom = 10.dp)`设定内容与屏幕底部的距离,以完成全面的布局适配。示例代码采用Kotlin。
127 15
|
3月前
|
XML 数据可视化 API
Android经典实战之约束布局ConstraintLayout的实用技巧和经验
ConstraintLayout是Android中一款强大的布局管理器,它通过视图间的约束轻松创建复杂灵活的界面。相较于传统布局,它提供更高灵活性与性能。基本用法涉及XML定义约束,如视图与父布局对齐。此外,它支持百分比尺寸、偏移量控制等高级功能,并配有ConstraintSet和编辑器辅助设计。合理运用可显著提高布局效率及性能。
232 0
|
3月前
|
Android开发
AutoX——当Android中clickable属性显示为false,实际可点击的布局如何处理
AutoX——当Android中clickable属性显示为false,实际可点击的布局如何处理
59 0
|
4月前
|
XML Android开发 数据安全/隐私保护
使用RelativeLayout布局Android界面
使用RelativeLayout布局Android界面