Java 提高设置TextView RecylcerView时的可跨越/可跨越性能
我有一个Java 提高设置TextView RecylcerView时的可跨越/可跨越性能,java,android,android-recyclerview,textview,spannable,Java,Android,Android Recyclerview,Textview,Spannable,我有一个RecyclerView,其中有许多textview。其中一个文本视图通过从数组列表中提取的标记的字符串填充了一个跨区。在阅读了Florina Muntenescu的教程后,我意识到我可以通过使用Spannable Factory来提高我的性能。我最大的问题是她的代码是用Kotlin编写的(我还不太清楚) 据我所知,这是关键信息 假设我们希望重用TextView并多次设置文本,就像在RecyclerView.ViewHolder中一样 在获得一个 对文本视图的引用。如果您使用的是Recy
RecyclerView
,其中有许多textview
。其中一个文本视图
通过从数组列表
中提取的标记的字符串
填充了一个跨区
。在阅读了Florina Muntenescu的教程后,我意识到我可以通过使用Spannable Factory
来提高我的性能。我最大的问题是她的代码是用Kotlin
编写的(我还不太清楚)
据我所知,这是关键信息
假设我们希望重用TextView
并多次设置文本,就像在RecyclerView.ViewHolder
中一样
在获得一个
对文本视图的引用。如果您使用的是RecyclerView,请执行此操作
当你第一次夸大你的观点时
因此,假设我有一个简单的RecyclerView适配器
设置一个跨越的文本视图
@Override
public void onBindViewHolder(RecyclerViewHolder rvh, int position){
String string =arrayList.get(position).getValue();
Spanned spanned = getSpannedValue(string);
rvh.tv.setText(spanned);
}
如何更改代码以利用Florina的建议?在java中,您应该在其实现cast source(CharSequence)中将方法
newspanable
重写为Spannable,并将此工厂设置为TextView
(在我的例子中为tvText)
请记住,它应该是从
ViewHolder的构造函数中设置的,而不是onBindViewHolder
。当您通过findViewById
获得对它的引用时,谢谢,所以我找到了dviewbyid,然后添加您的代码,然后设置文本。。。全方位视野保持器。对吗?哦,我的意思是我找到了viewbyd,然后添加你的代码。。。在ViewHolde构造函数中。和OnBindViewHolder中的setText我们应该在哪里编写setSpan?SpannableFactory如何减少对象创建的数量?
textView.setSpannableFactory(spannableFactory)
@Override
public void onBindViewHolder(RecyclerViewHolder rvh, int position){
String string =arrayList.get(position).getValue();
Spanned spanned = getSpannedValue(string);
rvh.tv.setText(spanned);
}
tvText.setSpannableFactory(new Spannable.Factory(){
@Override
public Spannable newSpannable(CharSequence source) {
return (Spannable) source;
}
});