我不是在这里询问如何完成'X'任务,但我想要做的比我现在做的更好。
我将提及此任务中使用的所有库,因此欢迎任何更好的建议。
以下是我的项目流程:
注意:同一个epub可以多次读取,所以我不会每次都提取。如果它第一次有点慢,那对我来说没问题。
这里的问题在于整个任务。输出是 RecyclerView ,其中包含 WebViews ,以及等待绑定的100-500页数据。 什么是定期执行这些任务/优化Recyclerview /绑定数据的最佳方式?或根据要求?
修改
我诊断出来的另一个问题是,android RecyclerView只根据需要调用 onBindViewHolder ,但因为我使用android:layout_height="wrap_content"
作为我的WebView [为什么?因为我不希望用户滚动页面,所以当页面结束时滚动列表]
onBindViewHolder 在需要时通过绑定布局来节省大量CPU,但在我的应用程序中,它在初始化时绑定了大约150个布局。如果我给WebView
一个固定的高度,它会变得更平滑。
有没有办法通过编程方法将高度设置为WebView,因此它将在初始化时绑定最大8-10布局,但150。
答案 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有多少行并不重要,这只是逻辑错误。 :) 谢谢你们