执行大量数据列表的最佳方式[目前使用RecyclerView]

时间:2015-12-01 19:16:11

标签: android android-recyclerview

我不是在这里询问如何完成'X'任务,但我想要做的比我现在做的更好。

我将提及此任务中使用的所有库,因此欢迎任何更好的建议。

以下是我的项目流程:

  • 数据库存储在远程主机上,该主机由其PHP API检索 使用改造
  • 我使用从远程主机下载epub文件 okHTTP
  • 然后使用 epublib 阅读epub
  • 提取资源以便稍后阅读[css / images etc。]
  • 阅读每个页面并将其存储在Array
  • 将数组传递给适配器并使用 Webview 作为输出xHTML代码的布局
  • 将适配器附加到 RecyclerView

注意:同一个epub可以多次读取,所以我不会每次都提取。如果它第一次有点慢,那对我来说没问题。

这里的问题在于整个任务。输出是 RecyclerView ,其中包含 WebViews ,以及等待绑定的100-500页数据。 什么是定期执行这些任务/优化Recyclerview /绑定数据的最佳方式?或根据要求?

修改

我诊断出来的另一个问题是,android RecyclerView只根据需要调用 onBindViewHolder ,但因为我使用android:layout_height="wrap_content"作为我的WebView [为什么?因为我不希望用户滚动页面,所以当页面结束时滚动列表]

onBindViewHolder 在需要时通过绑定布局来节省大量CPU,但在我的应用程序中,它在初始化时绑定了大约150个布局。如果我给WebView一个固定的高度,它会变得更平滑。

有没有办法通过编程方法将高度设置为WebView,因此它将在初始化时绑定最大8-10布局,但150。

1 个答案:

答案 0 :(得分:1)

好的,这就是我为解决这个问题所做的工作。 如果有人遇到过这类问题我希望它能帮助他们

错误/做错了。

首先,我将wrap_content高度赋予WebView,它表示为一行,用于保存Recyclerview中的数据。由于我在其中添加了具有CSS / Images的HTML数据,我想加载需要一段时间,布局高度尽可能低。这为显示的更多行提供了空间。这使得150页的html代码和每个新的webview作为手机假设150行适合屏幕,以便许多行准备好用新数据改变。这使它变得混乱。

<强>修正

我给webview提供了固定的高度,大约500dp,或者你可以给match_parent,但我建议保持低,这样几行设置就可以用来缓存。

使用

将函数onBindViewHolder上的数据绑定
holder.ePubWebView.loadDataWithBaseURL(contentUrl.get(position), htmlStuff.get(position), "text/html", "utf-8", null);

使用以下代码设置新的WebViewClient。

holder.ePubWebView.setWebViewClient(new WebViewClient(){
    @Override
    public void onPageFinished(WebView view, String url) {
        super.onPageFinished(view, url);
        ViewGroup.LayoutParams params = holder.ePubWebView.getLayoutParams();
        params.height = ViewGroup.LayoutParams.WRAP_CONTENT;
        holder.ePubWebView.setLayoutParams(params);
    }
});

一旦完成加载,我将WebView高度更改为WRAP_CONTENT。

现在它更顺畅,并且再次对于Recyclerview有多少行并不重要,这只是逻辑错误。 :) 谢谢你们