java - 提高设置 TextView RecyclerView 的跨度/可跨度性能
问题描述
我有一个RecyclerView
带有多个TextViews
. 其中一个由 , 通过从 中提取的标记TextViews
填充。在阅读了 Florina Muntenescu 的本教程后,我意识到我可以通过使用. 我最大的问题是她的代码是用写的(我还没到那里)。Spanned
String
ArrayList<Object>
Spannable Factory
Kotlin
据我所知,这是关键信息,
假设我们要重用 a
TextView
并多次设置文本,比如在 aRecyclerView.ViewHolder
...
val spannableFactory = object : Spannable.Factory() {
override fun newSpannable(source: CharSequence?): Spannable {
return source as Spannable
}
}`
Spannable.Factory
在获得对 TextView 的引用后立即设置对象。如果您使用的是 RecyclerView,请在首次扩充视图时执行此操作。
textView.setSpannableFactory(spannableFactory)
所以,假设我有一个简单RecyclerView adapter
的设置Spanned
TextView
。
@Override
public void onBindViewHolder(RecyclerViewHolder rvh, int position){
String string =arrayList.get(position).getValue();
Spanned spanned = getSpannedValue(string);
rvh.tv.setText(spanned);
}
如何更改我的代码以利用 Florina 的建议?
解决方案
在java中,您应该只覆盖 method newSpannable
,在其实现中将源(CharSequence)转换为 Spannable 并将此工厂设置为TextView
(在我的情况下为 tvText)
tvText.setSpannableFactory(new Spannable.Factory(){
@Override
public Spannable newSpannable(CharSequence source) {
return (Spannable) source;
}
});
请记住,它应该从构造函数设置,而不是. 当您通过.ViewHolder's
onBindViewHolder
findViewById
推荐阅读
- javascript - 用 eval() 解析的数组字符串(不是 JSON) - 如何保护?
- sharepoint - AddEventListener 到 SharePoint 模态窗口,以便父窗口可以执行一个函数,在模态窗口中声明
- php - PHP usort 遇到一些问题
- python - 字典理解从循环中产生不同的结果
- python - 如何从头开始在 cbmpy 中创建基因组规模的代谢模型?
- linux - IRQ 中断未被触发
- java - 使用 java 读取 spark 2.2 中的 XML 和键值格式的预期输出
- javascript - 从特定日期开始在 later.js 上每 3 个月和 6 个月重复一次
- javascript - 如何将所有命名的 HTML 标记拉入一个数组?
- c++ - 在 Rcpp-Function 中使用 Bool-Vector 进行子集化(Rcpp Beginner 的问题......)