我有一个编号为TextViews
的RecyclerView
。其中一个TextViews
通过从ArrayList<Object>
中提取的标记String
填充了Spanned
。在阅读Florina Muntenescu的this教程后,我意识到我可以通过使用Spannable Factory
来提高我的性能,我最大的问题是她的代码是用Kotlin
编写的(我还没有完全做到这一点)。
据我所知,这是关键信息,
假设我们想重用一个TextView
并多次设置文本,就像在RecyclerView.ViewHolder
中一样...
val spannableFactory = object : Spannable.Factory() {
override fun newSpannable(source: CharSequence?): Spannable {
return source as Spannable
}
}`
在获得TextView的引用后立即设置Spannable.Factory
对象。如果使用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);
}
我如何更改我的代码以利用弗罗伦纳的建议?
1条答案
按热度按时间nuypyhwy1#
在java中,你只需要重写
newSpannable
方法,在它的实现中将source(CharSequence)转换为Spannable,并将这个工厂设置为TextView
(在我的例子中是tvText)请记住,它应该是
ViewHolder's
构造函数中的set,而不是onBindViewHolder
。