我正在加载我的recyclerView,如下所示:
CursorLoader cursorLoader = new CursorLoader(this,
HymnsProvider.CONTENT_URI_DETAILS, HymnsProvider.hymn_details_projection,
HymnsProvider.KEY_LANGUAGE + "='" + language + "'", null, orderBy);
Cursor dataCursor = cursorLoader.loadInBackground();
List<HymnItem> itemList = new ArrayList<>();
do {
//String body = Html.fromHtml(dataCursor.getString(dataCursor.getColumnIndex(HymnsProvider.KEY_BODY)),null,null).toString();
HymnItem hymnItem = new HymnItem(dataCursor.getString(dataCursor.getColumnIndex(HymnsProvider.KEY_NO)),
dataCursor.getString(dataCursor.getColumnIndex(from)),
dataCursor.getString(dataCursor.getColumnIndex(chorusFrom)),
Html.fromHtml(dataCursor.getString(dataCursor.getColumnIndex(HymnsProvider.KEY_BODY)),null,null).toString(),
dataCursor.getString(dataCursor.getColumnIndex(HymnsProvider.KEY_BIBLE_TEXT)),
dataCursor.getString(dataCursor.getColumnIndex(HymnsProvider.KEY_LANGUAGE)));
itemList.add(hymnItem);
} while (dataCursor.moveToNext());
myRecyclerView.setAdapter(HymnAdapter(itemList, clickListener, ViewMode));
我面临的问题是recylerView的加载速度非常慢,因为我从数据库表中获取了1000多行。检查后,我发现问题是由使用Html.fromHtml()进行格式化引起的。
但是,我需要格式化从数据库返回的html,因为我正在使用HymnAdapter进行过滤。还有什么其他方法可以加载它以使其更快。
我尝试使用replaceAll("<.*?>" , "").replaceAll("&.*?;" , "")
函数,但是它仍然很慢。
我也尝试在sqlite中使用replace函数,但它不接受正则表达式
答案 0 :(得分:0)
问题是您试图一次性加载数据库中的所有项目。 RecyclerView的目的是通过仅在数据集中显示一个“窗口”来加快速度。因此,您只应根据需要加载/显示项目,这样,在用户滚动时,只需使用几次fromHtml
方法即可。
用Google搜索"recyclerview cursor adapter"
会产生很多结果,其中第一个是this post,它表明您可以仅从数据库中读取所需的项来编写适配器。
希望有帮助。
答案 1 :(得分:0)
使用分页获取记录块,而不是整个记录。读这个。 https://developer.android.com/topic/libraries/architecture/paging