`

Cursor与Adapter结合使用

 
阅读更多

              查询数据库均会把查询的结果包装在一个Cursor的子类对象中返回。Cursor就像是位于结果集之上的一个游标,可以对结果集进行向前、向后或随机的访问。而Cursor本身是一个接口类,提供了对结果集访问的一些抽象方法,根据功能的不同在其子类有着不同的实现。要控制查询时返回的Cursor类型,可以自定义一个继承自CursorFactory类通过实现其newCursor()方法来返回需要的Cursor子类对象,但在CursorFactory传入null的默认情况下,查询操作会返回一个指向第一行数据之前的SQLiteCursor的对象。

 

                 在实际的应用编写过程中,更多是通过适配器(Adapter)来将Cursor与适配器控件联系起来。Android为Cursor提供了一个抽象类CursorAdapter,可以方便实现Cursor与适配器的连接。只需要创建一个继承自CursorAdapter的类,实现其bindView()和newView()两个抽象方法,或根据需要重新实现其他方法就可以用此类来构造一个可适配Cursor的适配器。下面是关于bindView()和newView()两个抽象方法需要实现的内容。

  • public void bindView(View view, Context context, Cursor cursor)
    重用一个已有的view,使其显示当前cursor所指向的数据。
  • public View newView(Context context, Cursor cursor, ViewGroup parent)
    为cursor所指向的数据新建一个View对象,并显示其数据。

另外还需要注意的是,传入到CursorAdapter中的Cursor结果集必须包含有列名为_id的列,否则CursorAdapter将不会起作用。

综合前面的说明,举个具体例子如下:

变量以便在程序中引用:
TextView display;
Spinner s;

填充Spinner控件的代码:

s = (Spinner)findViewById(R.id.spinner);
display = (TextView)findViewById(R.id.display);
SimpleCursorAdapter adapter = new SimpleCursorAdapter(this,
android.R.layout.simple_spinner_item,
c,
new String[] { MyHelper.COUNTRY},
new int[] {android.R.id.text1});
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
s.setAdapter(adapter);
s.setOnItemSelectedListener(new OnItemSelectedListener()
{
public void onItemSelected(AdapterView<?> adapter,View v,int pos, long id)
{
c.moveToPosition(pos);
display.setText(c.getString(codeIndex));
}
public void onNothingSelected(AdapterView<?> arg0) {}
});

 

 

       首先通过id分别获得TextView和Spinner对象的引用,然后使用之前查询返回的Cursor和Android 自带的Spinner子控件的布局构造一个SimpleCursorAdapter,再调用setDrop-DownViewResource()方法来设置点开Spinner后显示子控件的布局,最后设置Spinner的适配器为adapter并对其子控件被选取的事件设置一个监听器。

需要注意的是Spinner不支持设置点击事件的监听器(OnClickListener),强行设置的话会抛出异常。

分享到:
评论

相关推荐

    CursorAdapter和ListView结合使用

    在Android开发中,ListView是用于显示大量数据列表的常用组件,而CursorAdapter则是与数据库查询结果(Cursor对象)配合使用的适配器。本篇将详细阐述CursorAdapter与ListView结合使用的核心概念、步骤以及最佳实践...

    Android_Adapter 讲解

    在Android开发中,Adapter是一个至关重要的组件,它作为数据与视图之间沟通的桥梁,...同时,适配器的灵活性允许我们轻松地将不同类型的数据源与各种复杂的UI布局相结合,使得Android应用具有高度的可定制性和扩展性。

    android ListView与SQLiteDatabase结合

    本篇将探讨如何将ListView与SQLite相结合,实现数据的高效管理和显示。 首先,我们需要创建一个SQLite数据库来存储数据。在Android中,我们通常通过继承`SQLiteOpenHelper`类来实现,重写`onCreate()`和`onUpgrade...

    ListView控件使用实例

    在本实例中,我们将深入探讨如何在Android应用程序中有效地利用ListView,以及如何结合数据库来实现数据的动态加载与显示。 首先,ListView的核心组成部分包括Adapter和View。Adapter是ListView和数据源之间的桥梁...

    CursorAdapter demo

    - `Adapter`: 在 Android 中,Adapter 是一个桥接组件,它将数据源(如数组、列表或 Cursor)与 UI 控件(如 ListView)连接起来,负责数据的绑定和显示。 2. **CursorAdapter 的功能** - `BindView()`: 将 ...

    GridView和CheckBox结合使用

    当GridView与CheckBox结合使用时,我们可以创建一个功能丰富的界面,让用户能够对多项数据进行选择。 ### GridView基本概念 GridView继承自AbsListView,它会将数据源(通常是ArrayList或Cursor)中的元素按行和列...

    ListVIew存储和表现sqlite数据

    在ListView中,Cursor通常与CursorAdapter结合使用。 - **CursorAdapter**:适配器类,将Cursor数据转换为ListView可显示的View。通过newView()和bindView()方法填充视图。 3. **ListView配置**: - **布局文件**...

    ListView 与ArrayAdapter,BaseAdapter,SimpleAdapter,SimpleCursorAdapter配合使用实例。

    在Android开发中,ListView是一种非常常见的控件,用于展示大量数据列表。它的核心功能是通过适配器(Adapter)来实现数据与视图之间的绑定。...在项目中,往往需要结合使用这些适配器,以实现复杂的功能和交互。

    listview综合使用示例_结合数据库和listitem单击长按等事件

    本示例"listview综合使用示例_结合数据库和listitem单击长按等事件"将深入讲解如何结合SQLite数据库操作与ListView的交互功能,包括单击事件、长按事件的处理。以下是对这些知识点的详细阐述: 1. **ListView**:...

    Android中CursorAdapter的使用

    在Android开发中,CursorAdapter是连接数据库查询结果(Cursor对象...在实际开发中,结合CursorLoader使用,能构建出高效且响应迅速的用户界面。在CursorAdapterPractice项目中,你可以看到这些概念是如何实际应用的。

    CursorAdapter Filter

    CursorAdapter就是这样一个桥梁,它将数据库查询结果(通常是一个Cursor对象)与Adapter结合,使得数据能够适配到UI组件上。而Filter功能则进一步增强了CursorAdapter,允许用户通过输入搜索关键字来实时筛选和过滤...

    Android项目-读取联系人结合listview.zip

    记得在使用完Cursor后关闭它以释放资源。 4. **ListView及其Adapter**: ListView是Android中用于显示大量数据的视图组件。在这个项目中,我们需要创建一个自定义的Adapter,比如`ContactListAdapter`,它继承自`...

    Android中ViewPager实现滑动条及与Fragment结合的实例教程

    在本例中,我们将使用FragmentPagerAdapter,因为它支持与Fragment的结合,使得内容更易于管理和更新。 接着,我们来看XML布局。在布局文件中,我们创建了一个LinearLayout,设置为垂直方向,包含一个ImageView作为...

    AndroidCallLog获取通话记录

    - 为了提高性能,避免一次性加载大量数据,可以使用CursorLoader或LiveData与Room库结合来实现异步加载和监听数据变化。 通过以上步骤,我们可以成功地在Android应用中获取通话记录,并将其展示在ListView上。封装...

    Android中ListView,SQLite,BaseAdapter的结合

    ### Android中ListView、SQLite与BaseAdapter的结合应用 在Android开发中,经常需要处理列表数据展示及后台数据库操作。本文将详细介绍如何通过ListView组件、SQLite数据库以及BaseAdapter自定义适配器来实现一个...

    Android-AndroidLoaderDemo演示CursorLoader和AsyncTaskLoader使用实例

    在实际项目中,结合ContentProvider使用CursorLoader可以高效地处理数据库查询,而AsyncTaskLoader则能适应更广泛的异步任务需求。AndroidLoaderDemo-master这个项目可能包含了一个完整的示例,涵盖了这两种Loader的...

    A0610使用SQLiteSimpleCursorAdapter1

    - `SimpleCursorAdapter`的作用:它是用于将数据库查询结果(Cursor)映射到UI布局中的Adapter,通常用于ListView、GridView等AdapterView中。 - 构造方法:`SimpleCursorAdapter(Context context, int layout, ...

    AndroidAdapter的介绍[参照].pdf

    - **SimpleCursorAdapter**:与数据库操作结合紧密,将Cursor中的数据映射到ListView,适用于显示数据库查询结果。 2. 使用Adapter的基本步骤 - **创建ListView/GridView**:首先,你需要在布局文件中定义一个...

    Android中ListView,SQLite,BaseAdapter的结合[参照].pdf

    - 使用ListView的setAdapter(BaseAdapter adapter)方法将自定义的BaseAdapter与ListView关联。 通过上述的组合使用,我们可以实现一个功能完整的数据展示界面,用户可以查看从SQLite数据库中检索出的数据,并通过...

    android listview和spinner实例代码

    2. **ArrayList**: 如果数据源更复杂,如包含自定义对象,可以使用ArrayList配合自定义的Adapter。自定义Adapter需要重写`getView()`方法来显示每个项目的视图。 ```java ArrayList&lt;MyObject&gt; dataList = new ...

Global site tag (gtag.js) - Google Analytics