10.3.4. 在TimelineActivity.java中创建一个Adapter

优质
小牛编辑
132浏览
2023-12-01

10.3.4.在TimelineActivity.java中创建一个Adapter

已经有了相应的XML文件,接下来修改Java代码,把Adapter创建出来。Adapter通常有两种形式:一种基于数组(Array),一种基于Cursor。这里我们的数据来自数据库,因此选择基于Cursor的Adapter。而其中最简单的又数SimpleCursorAdapter。

SimpleCursorAdapter需要我们给出单行数据的显示方式(这在row.xml中已经做好了)、数据(在这里是一个Cursor) 、以及record到List中单行的映射方法。最后的这个参数负责将Cursor的每列映射为List中的一个View。

例 10.5. TimelineActivity.java, version 2

package com.marakana.yamba5;

import android.app.Activity;

import android.database.Cursor;

import android.database.sqlite.SQLiteDatabase;

import android.os.Bundle;

import android.widget.ListView;

import android.widget.SimpleCursorAdapter;

public class TimelineActivity2 extends Activity {

DbHelper dbHelper;

SQLiteDatabase db;

Cursor cursor; //

ListView listTimeline; //

SimpleCursorAdapter adapter; //

static final String[] FROM = { DbHelper.C_CREATED_AT, DbHelper.C_USER,

DbHelper.C_TEXT }; //

static final int[] TO = { R.id.textCreatedAt, R.id.textUser, R.id.textText }; //

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.timeline);

// Find your views

listTimeline = (ListView) findViewById(R.id.listTimeline); //

// Connect to database

dbHelper = new DbHelper(this);

db = dbHelper.getReadableDatabase();

}

@Override

public void onDestroy() {

super.onDestroy();

// Close the database

db.close();

}

@Override

protected void onResume() {

super.onResume();

// Get the data from the database

cursor = db.query(DbHelper.TABLE, null, null, null, null, null,

DbHelper.C_CREATED_AT + " DESC");

startManagingCursor(cursor);

// Setup the adapter

adapter = new SimpleCursorAdapter(this, R.layout.row, cursor, FROM, TO); //

listTimeline.setAdapter(adapter); //

}

}

  1. 这个Cursor用以读取数据库中的朋友消息。
  2. listTimeLine即我们用以显示数据的ListView。
  3. adapter是我们自定义的Adapter,这在后文中讲解。
  4. FROM是个字符串数组,用以指明我们需要的数据列。其内容与我们前面引用数据列时使用的字符串相同。
  5. TO是个整型数组,对应布局row.xml中指明的View的ID,用以指明数据的绑定对象。FROM与TO的各个元素必须一一对应,比如FROM[0]对应TO[0],FROM[1]对应TO[1],以此类推。
  6. 获取XML布局中声明的ListView。
  7. 获得了Cursor形式的数据,row.xml定义了单行消息的布局,常量FROM与TO表示了映射关系,现在可以创建一个SimpleCursorAdapter。
  8. 最后通知ListView使用这个Adapter。