0

textView で特殊文字を色付けするために SpannedString を使用しています。SpannedString を使用せずにプレーン テキストを設定すると、すべて正常に動作しますが、SpannedString を使用すると、スクロールが非常に遅くなり、非常にラグが発生します。

onBindViewHolder 関数が非常に単純であることはわかっていますが、スパンされた文字列を格納するさまざまな方法を試し、htmlString も使用しましたが、改善はありませんでした。また、正規表現を使用して特殊文字を検索しますが、LG デバイスでは、前の文字も色付けされているため、他の文字の色を強制的に黒にする必要があります。

また、setHasFixedSize、setExtraLayoutSpace、constraint-layout もテストします。しかし、それは変わりません。

ここに私の onBindViewHolder 関数があります:

@Override
public void onBindViewHolder(AyeViewHolder holder, int i) {

    holder.setIsRecyclable(false);

    SpannedString result = new SpannedString("");
    for (int j = 0; j < ayeList.get(i).getAye().length(); j++) {
        SpannableStringBuilder wordtoSpan = new SpannableStringBuilder(ayeList.get(i).getAye().substring(j,j+1));

        if (arabicV.contains(ayeList.get(i).getAye().substring(j, j + 1))) {
            wordtoSpan.setSpan(new ForegroundColorSpan(Color.parseColor(PrefUtils.getFromPrefs(context,
                    PrefUtils.ARABIC_COLOR, "#FF0000"))),
                    0, 1 , 0);

        }else if (endSuffix.contains(ayeList.get(i).getAye().substring(j, j + 1))) {
            wordtoSpan.setSpan(new ForegroundColorSpan(Color.parseColor( "#00acc2")),
                    0, 1 , 0);
        }else {
            wordtoSpan.setSpan(new ForegroundColorSpan(Color.parseColor("#000000")),
                    0, 1, 0);
        }
        result = (SpannedString) TextUtils.concat(result,"",wordtoSpan);
    }
    holder.aye.setText(result, TextView.BufferType.SPANNABLE);
}

どうすればこれを修正できますか?

ありがとう

ここに私のrecyclerviewからのスクリーンショットがあります

4

2 に答える 2