0

我正在使用游标从 SQLite 数据库中读取数据,并使用适配器将其显示在 listView 中。这工作正常,但我现在想减少我在 listView 中显示的数据量。目前它显示以下内容:

John Smith, 25, Moday, Consultation, Dr. Harley
Jane Doe, 41, Wednesday, Surgery, Dr. Pope

我希望它显示的是:

John Smith, 25, Mo, Con, Harley
Jane Doe, 41, We, Sur, Pope

基本上我想解析 3 个字符串。问题是游标适配器在其构造函数中将数据库的列作为字符串数组,所以我不知道在哪里对其执行解析操作。我尝试了许多不同的选项,但遇到无法识别的列 ID 错误和其他运行时错误。谁能指出我正确的方向?

创建适配器的方法:

private void fillList() {
        Cursor c = db.getApts();
        startManagingCursor(c);

        String[] from = new String[] {ModuleDB.KEY_AptCode,
                          ModuleDB.KEY_AptName,
                          ModuleDB.KEY_AptAge,
                          ModuleDB.KEY_AptDay,
                          ModuleDB.KEY_AptType,
                                  ModuleDB.KEY_AptDoc};
        int[] to = new int[] {R.id.Aptcode_entry,
                      R.id.AptName_entry,
                      R.id.AptAge_entry,
                      R.id.Aptday_entry,
                              R.id.Apttype_entry,
                              R.id.Aptdoc_entry};

        SimpleCursorAdapter aptAdapter = 
                new SimpleCursorAdapter(this, R.layout.apt_entry, c, from, to);
        setListAdapter(aptAdapter);

    }
4

3 回答 3

3

1.)让您的活动实施 - ViewBinder

2.)匹配您的列并使用子字符串

public class YourActivity extends Activity
    implements SimpleCursorAdapter.ViewBinder {

   adapter.setViewBinder(this); //Put this line after your list creation and setlistAdapter


    @Override
    public boolean setViewValue(View view, Cursor cursor, int column) {
     //Showing for day, similarly for others
        int dayColumn = cursor.getColumnIndex(your day column name in quotes);
        if (column == dayColumn ) {
            String dayString = cursor.getString(dayColumn );
            ((TextView)view).setText(bodyString.subString(0, 3));

            return true; // Return true to show you've handled this column
        }
        return false;
    }

}

另外 - @Simon 是对的 - 使用扩展光标适配器的自定义适配器总是更好,因为如果您的需求进一步发展,您以后可以更自由地修改它。这是一个如何使用自定义适配器并构建一个不错的列表的示例 - http://www.androidhive.info/2012/02/android-custom-listview-with-image-and-text /

于 2012-11-07T15:00:00.260 回答
1

不确定您使用什么适配器,但假设所有数据都显示为单行,那么我将扩展该适配器并覆盖toString()它的方法。

于 2012-11-07T14:41:42.760 回答
1

不要认为您可以在简单的适配器上覆盖 toString() 但这可能会有所帮助?

SimpleCursorAdapter aptAdapter= new SimpleCursorAdapter(this, R.layout.apt_entry, c, from, to);

 CursorToStringConverter stringConverter = new CursorToStringConverter() {    
    @Override
    public CharSequence convertToString(Cursor cursor) {
       return "Hello listview"; // whatever string you want to build using cursor.getString() etc
    }
 }; 

 aptAdapter.setCursorToStringConverter(stringConverter);

[编辑] 刚刚检查了文档,SimpleCursorAdapter 没有 toString() 方法,也没有任何超类。

于 2012-11-07T14:51:25.040 回答