android 提高设置TextView RecylcerView时的跨转/可跨转性能

weylhg0b  于 2023-01-15  发布在  Android
关注(0)|答案(1)|浏览(106)

我有一个编号为TextViewsRecyclerView。其中一个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设置一个SpannedTextView

@Override
public void onBindViewHolder(RecyclerViewHolder rvh, int position){

    String string =arrayList.get(position).getValue();
    Spanned spanned = getSpannedValue(string);
    rvh.tv.setText(spanned);
}

我如何更改我的代码以利用弗罗伦纳的建议?

nuypyhwy

nuypyhwy1#

在java中,你只需要重写newSpannable方法,在它的实现中将source(CharSequence)转换为Spannable,并将这个工厂设置为TextView(在我的例子中是tvText)

tvText.setSpannableFactory(new Spannable.Factory(){
            @Override
            public Spannable newSpannable(CharSequence source) {
                return (Spannable) source;
            }
        });

请记住,它应该是ViewHolder's构造函数中的set而不是onBindViewHolder

相关问题