我正在使用游标从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);
}
答案 0 :(得分: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/
答案 1 :(得分:1)
不确定您使用的是哪个适配器,但假设所有数据都显示为单行,那么我会扩展该数据并覆盖它的toString()
方法。
答案 2 :(得分: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()方法,也没有任何超类。