如何制作负载回收器适配器以使其快速运行

时间:2019-07-14 00:02:54

标签: android android-recyclerview recycler-adapter

我正在加载我的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函数,但它不接受正则表达式

2 个答案:

答案 0 :(得分:0)

问题是您试图一次性加载数据库中的所有项目。 RecyclerView的目的是通过仅在数据集中显示一个“窗口”来加快速度。因此,您只应根据需要加载/显示项目,这样,在用户滚动时,只需使用几次fromHtml方法即可。

用Google搜索"recyclerview cursor adapter"会产生很多结果,其中第一个是this post,它表明您可以仅从数据库中读取所需的项来编写适配器。

希望有帮助。

答案 1 :(得分:0)

使用分页获取记录块,而不是整个记录。读这个。 https://developer.android.com/topic/libraries/architecture/paging