我在我的 Android 应用程序的数据库之间提供数据。一个数据库的信息在文本视图中显示为可点击的跨度。在创建新跨度之前,光标会重新排序所有跨度,然后再将它们全部重新附加到文本视图。
此功能有效,但是一旦数据库有大约 50 行或更多行,每次数据在短时间内发生变化时迭代游标就会明显变慢。
有没有办法实现一种方法,只需要查看新行即可将其添加到适当的位置,而不是每次创建新跨度时都遍历游标中的每一行?同样,有没有办法删除跨度而不必重新加载整个文本视图?
为由 clickableSpans 组成的 textview 准备数据的代码:
Cursor cursor = dbHelper.fetchAllTT3Values();
do {
String value = cursor.getString(cursor.getColumnIndex("mainValues"));
doClickSpanForString(tv1, value, cursor.getInt(3));
} while (cursor.moveToNext());
cursor.close();
(注意:dbHelper.fetchAllTT3Values() 函数按整数列对数据进行排序,因此这会重新排列下面函数中附加的内容。)
带有数据标记的可点击跨度的代码:
public void doClickSpanForString(TextView txtSpan, String valtag, Integer valordtag) {
spanText = new SpannableString(valtag+" ");
MyClickableSpan a = new MyClickableSpan(valtag);
a.setTag1(valtag);
a.setTag2(valordtag);
spanText.setSpan(a, 0, valtag.length(), 0);
txtSpan.append(spanText);
}
private class MyClickableSpan extends ClickableSpan {
private String mtag1;
private int mtag2;
void setTag1(String tag) {
mtag1 = tag;
}
String getTag1() {
return mtag1;
}
void setTag2(Integer tag) {
mtag2 = tag;
}
int getTag2() {
return mtag2;
}
MyClickableSpan(String string) {
super();
}
public void onClick(View tv) {
//tv.performLongClick();
setstr4val(getTag1());
setint4valord(getTag2());
}
}