我在Android应用中的数据库之间提供数据。一个数据库的信息在文本视图中显示为可点击的跨度。在创建新跨距之前,光标会重新排序所有跨距,然后将它们全部重新附加到textview。
此功能有效,但是一旦数据库有大约50行或更多行,每次数据在短时间内发生变化时迭代游标都会非常慢。
有没有办法实现一种只需要查看新行以将其添加到适当位置的方法,而不是每次创建新跨度时迭代光标中的每一行?同样,有没有办法删除跨度而无需重新加载整个textview?
为由clickableSpans组成的textview准备数据的代码:
escape_control_characters()
(注意:dbHelper.fetchAllTT3Values()函数按整数列对数据进行排序,因此这将重新排列下面函数中附加的内容。)
标记有数据的可点击跨度代码:
Cursor cursor = dbHelper.fetchAllTT3Values();
do {
String value = cursor.getString(cursor.getColumnIndex("mainValues"));
doClickSpanForString(tv1, value, cursor.getInt(3));
} while (cursor.moveToNext());
cursor.close();
答案 0 :(得分:0)
编辑:
在使用该数据库的数据期间,我最终没有使用下面的方法,只从数据库中查询一次数据。它的速度更快,但在文本视图中添加了大约一千条数据之后,它仍然明显变慢。将大型spannablestringbuilder附加到textview或事先通过循环更新数据会导致速度变慢。我认为删除循环是唯一的解决方案。但是,如果附件是瓶颈,则不会更快地将数据附加到textview。什么是一个老的,不充分的解决方案。
sb = new SpannableStringBuilder("");
do {
String value = cursor.getString(cursor.getColumnIndex("mainValues"));
sb.append(doClickSpanForString(value, cursor.getInt(3)));
} while (cursor.moveToNext());
tv1.setText(sb);
将函数doClickSpanForString更改为在循环的每次迭代时都不对textView起作用,这使得此代码更有效。但它仍然很慢。