Повышение производительности в сочетании с настройкой TextView RecylcerView - PullRequest
0 голосов
/ 24 ноября 2018

У меня есть RecyclerView с номером TextViews.Один из них TextViews заполняется Spanned через пометку String, взятую из ArrayList<Object>.Прочитав этот учебник Флорины Мунтенеску, я понял, что могу улучшить свою производительность, используя Spannable Factory.Моя самая большая проблема в том, что ее код написан на Kotlin (а я еще не совсем там).

Насколько я могу судить, это ключевая информация,

Допустим, мы хотим повторно использовать TextView и установить текст несколько раз, как в RecyclerView.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?

1 Ответ

0 голосов
/ 24 ноября 2018

В Java вы должны просто переопределить метод newSpannable, в его источнике приведения (CharSequence) к Spannable и установить эту фабрику на TextView (tvText в моем случае)

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

Имейте в виду, он должен быть установлен из ViewHolder's конструктор, не onBindViewHolder.Когда вы получаете ссылку на него по findViewById.

...