gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 01:43:48 24 4
gpt4 key购买 nike

我不是来问如何完成“X”任务的,但我想以比现在更好的方式完成它。

我会提到这个任务中使用的所有库,所以欢迎任何更好的建议。

下面是我的项目流程:

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

注意:同一个epub可以多次阅读,所以我不会每次都解压。如果第一次慢一点,对我来说没关系。

这里的问题在于整个任务。输出是 RecyclerView,里面有大约 WebViews,还有 100-500 页数据等待绑定(bind)。定期或根据要求执行这些任务/优化 recyclerview/绑定(bind)数据的最佳方法是什么?

编辑

这里我诊断出另一个问题,android RecyclerView 只根据要求调用 onBindViewHolder 但因为我为我的 WebView 使用了 android:layout_height="wrap_content" [为什么?因为我不希望用户滚动页面然后在页面结束时滚动列表]

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

有什么方法可以通过编程方法将高度设置为 WebView,以便它在初始化时最多绑定(bind) 8-10 个布局,但 150 个。

最佳答案

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

错误/做错事。

首先,我将 wrap_content 高度赋予了 WebView,它表示为在 recyclerview 中保存数据的单行。由于我在其中添加了具有 CSS/图像的 HTML 数据,我猜它需要一段时间才能加载并且布局高度尽可能低。这为显示更多行提供了空间。这产生了 150 页 html 代码,并且每个手机的新 webview 假定 150 行适合屏幕,以便许多行随时准备好用新数据进行更改。这让事情变得一团糟。

修复

我为 webview 设置了大约 500dp 的固定高度,或者您可以设置 match_parent,但我建议保持较低的高度,以便成对的行集可以为缓存做好准备。

在函数 onBindViewHolder 上绑定(bind)数据

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,这只是逻辑错误。 :)谢谢大家

关于android - 执行大量数据列表的最佳方式[当前使用 RecyclerView],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34028294/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com