#android #textview #android-recyclerview #charsequence
#Android #textview #android-recyclerview #последовательность символов
Вопрос:
Я пытаюсь реализовать макет в стиле раздела комментариев, используя RecyclerView
. У меня есть список CharSequence
объектов (каждый результат Html.fromHtml(String, null, null)
), которые я использую для заполнения этого RecyclerView
.
Вот RecyclerView
макет:
<android.support.v7.widget.RecyclerView
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@ id/list"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
Вот TextView
макет:
<TextView
android:id="@ id/text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="16dp"
android:lineSpacingMultiplier="1.4"
android:textAppearance="@style/TextAppearance.AppCompat.Body1"
android:textIsSelectable="true"
android:textSize="15sp"/>
Вот ViewHolder
:
public final class ItemHolder extends RecyclerView.ViewHolder {
@Bind(R.id.text) TextView text; // ButterKnife
public ItemHolder(View itemView) {
super(itemView);
ButterKnife.bind(this, itemView);
text.setMovementMethod(new LinkMovementMethod());
}
public void bind(CharSequence cs) {
text.setText(cs);
}
Остальное довольно стандартно. Задаются RecyclerView
a LinearLayoutManager
и an Adapter
, которые считываются из списка и создают ViewHolder
экземпляры. Я не звонил setHasFixedSize(true)
, потому что хочу иметь возможность менять местами содержимое адаптера, и количество элементов не всегда может быть одинаковым.
Настройка работает для большинства входных данных, но проблема в том, что некоторые из CharSequence
них имеют длину более 100 строк, и при прокрутке файл RecyclerView
останавливается примерно на полсекунды непосредственно перед тем, как он дойдет до них, а затем продолжает прокрутку. Это происходит не только один раз. Когда я прокручиваю обратно до элемента, он снова зависает, а затем каждый раз, когда я прокручиваю элемент вне поля зрения и прокручиваю его обратно вниз, представление снова зависает. Как мне это исправить?
Комментарии:
1. как вы
onBindViewHolder
выглядите?2. Никогда не рекомендуется использовать recyclerview для такой цели. Поскольку текст вашей строки (CharSequence) очень большой, для полного отображения требуется несколько микросекунд (или секунд), и это происходит со всеми представлениями экземпляров в видимой области (еще не переработанными). Быстрым решением может быть выгрузка части setText в другой фоновый поток, освобождая поток пользовательского интерфейса для свободного создания экземпляров. Также не размещайте много контента непосредственно в потоке пользовательского интерфейса.
3. @NileshSingh Как разгрузить settext фонового потока, держатель не позволяет изменять какие-либо данные, кроме потока пользовательского интерфейса, пожалуйста, приведите какой-нибудь пример или ссылку для этого.