分享

Cursor与Adapter结合使用

 android之情殇 2012-06-28

              查询数据库均会把查询的结果包装在一个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控件的代码:

Java代码  收藏代码
  1. s = (Spinner)findViewById(R.id.spinner);  
  2. display = (TextView)findViewById(R.id.display);  
  3. SimpleCursorAdapter adapter = new SimpleCursorAdapter(this,  
  4. android.R.layout.simple_spinner_item,  
  5. c,  
  6. new String[] { MyHelper.COUNTRY},  
  7. new int[] {android.R.id.text1});  
  8. adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);  
  9. s.setAdapter(adapter);  
  10. s.setOnItemSelectedListener(new OnItemSelectedListener()  
  11. {  
  12. public void onItemSelected(AdapterView<?> adapter,View v,int pos, long id)  
  13. {  
  14. c.moveToPosition(pos);  
  15. display.setText(c.getString(codeIndex));  
  16. }  
  17. public void onNothingSelected(AdapterView<?> arg0) {}  
  18. });  

 

 

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

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

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多