Recyclerview не сохраняет мою позицию прокрутки - PullRequest
0 голосов
/ 12 февраля 2019

Я создаю приложение с помощью StaggeredGridLayout.Но как только я открываю фрагмент сведений (который обрабатывается навигационной библиотекой) и затем возвращаюсь к основному фрагменту, моя прокручиваемая позиция теряется.

Я уже пытался сохранить экземпляр окна повторного просмотра, чтобы применить его один размы достигаем onResume, но эта техника нарушает мой переход sharedelement.

XML-код рециркулятора

<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/linear_main"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layout_behavior="@string/appbar_scrolling_view_behavior">

<androidx.recyclerview.widget.RecyclerView
    android:id="@+id/recentNotesList"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingStart="20dp"
    android:paddingEnd="20dp"
    app:layout_constraintBottom_toBottomOf="parent"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toTopOf="parent"/>

<ProgressBar
    android:id="@+id/loading_ui"
    android:layout_width="75dp"
    android:layout_height="75dp"
    app:bindIsGone="@{thisVm.hasNotes}"
    app:layout_constraintBottom_toBottomOf="parent"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toTopOf="parent" />

<androidx.appcompat.widget.AppCompatImageView
    android:id="@+id/nonethinking"
    android:layout_width="0dp"
    android:layout_height="0dp"
    android:paddingStart="20dp"
    android:paddingEnd="20dp"
    android:scaleType="fitCenter"
    android:src="@drawable/thinking"
    android:visibility="gone"
    app:layout_constraintBottom_toBottomOf="parent"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>

HomeMainFragment

val lm = StaggeredGridLayoutManager(2,StaggeredGridLayoutManager.VERTICAL)
lm.gapStrategy = StaggeredGridLayoutManager.GAP_HANDLING_NONE
binding.recentNotesList.layoutManager = lm

Ожидаемые результаты: при открытии элемента -> переход sharedelement (эта работа) При закрытии открытого элемента-> переход sharedelement

Фактические результаты: при закрытии открытого элемента -> переход sharedelement работает только в том случае, если изображение, видимое, когда пользователь еще не прокрутил обзор реселлера.

Я думаю, что оно что-то имеетделать с процессом сохранения положения прокрутки.Но я не смог заставить эту вещь работать.

Ответы [ 2 ]

0 голосов
/ 15 февраля 2019

Я исправил это, используя ConstraintLayout в моих элементах просмотра переработчика.Просто установите соотношение сторон по умолчанию 1: 1, а затем программно обновите это соотношение сторон с помощью соотношения сторон вашего приложения в onBindViewHolder.

Примерно так:

XML RV элемента

<androidx.constraintlayout.widget.ConstraintLayout
    android:id="@+id/parentContsraint"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <androidx.appcompat.widget.AppCompatImageView
        android:id="@+id/show_image_note"
        android:layout_width="0dp"
        android:layout_height="0dp"
        android:scaleType="centerCrop"
        android:contentDescription="@string/image_of_your_dedicated_note"
        android:transitionName="@{String.valueOf(note.id)}"
        app:imageFromFile="@{note.image}"
        app:srcCompat="@drawable/pool"
        app:layout_constraintDimensionRatio="1:1"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent"/>

А в вашем адаптере

with(set) {
    val posterRatio = String.format("%d:%d", resource.width, resource.height)
    clone(binding.parentContsraint)
    setDimensionRatio(binding.showImageNote.id, posterRatio)
    applyTo(binding.parentContsraint)
}
0 голосов
/ 12 февраля 2019

Привет, пожалуйста, попробуйте это, когда вы настраиваете свой адаптер на переработку.

val lastFirstVisiblePositon= recyclerview.layoutmanager.findFirstCompletelyVisibleItemPosition();
recyclerview.layoutmanager.scrollToPositionWithOffset(lastFirstVisiblePosition, 0);
listdapter.notifyDataSetChanged();
hRecyclerView_OpenOrderListing.setAdapter(listdapter);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...