Если элементы утилитаризма находятся вне диапазона, diffcallback не работает должным образом при вставке - PullRequest
0 голосов
/ 18 февраля 2020

Я использую <CollapsingToolbarLayout> вверху и поместил <NestedScrollView> под ним, а внутри <NestedScrollView> есть <RecyclerView>.

    <com.google.android.material.appbar.AppBarLayout
        android:layout_width="match_parent"
        android:layout_height="@dimen/app_bar_height">

        <com.google.android.material.appbar.CollapsingToolbarLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            app:layout_scrollFlags="scroll|enterAlways">

            <TextView
                android:layout_width="wrap_content"
                android:layout_height="match_parent"
                android:layout_gravity="center"
                android:layout_margin="5dp"
                android:gravity="center"
                android:text="XXXXXXXXX"
                android:textColor="#fff"
                android:textSize="25sp"
                android:textStyle="bold" />

            <ImageButton
                android:id="@+id/btn_menu"
                android:layout_width="40dp"
                android:layout_height="40dp"
                android:layout_gravity="end|center_vertical"
                android:layout_marginEnd="8dp"
                android:background="@android:color/transparent"
                android:src="@drawable/ic_menu" />

        </com.google.android.material.appbar.CollapsingToolbarLayout>

    </com.google.android.material.appbar.AppBarLayout>

    <androidx.core.widget.NestedScrollView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:fillViewport="true"
        android:scrollbars="none"
        app:layout_behavior="@string/appbar_scrolling_view_behavior">

        <androidx.recyclerview.widget.RecyclerView
            android:id="@+id/rv_main"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            app:layout_behavior="@string/appbar_scrolling_view_behavior"
            tools:listitem="@layout/memo_item" />

    </androidx.core.widget.NestedScrollView>

Как показано ниже, мы инициализировал вид переработчика, так что новый элемент добавлялся вверху.

val layoutManager = LinearLayoutManager(this)
layoutManager.reverseLayout = true
layoutManager.stackFromEnd = true
rv_main.layoutManager = layoutManager
rv_main.setHasFixedSize(true)

Когда количество элементов не превышает экран просмотра переработчика, DiffCallback естественным образом добавляет элемент вверху.

Ах, это мой Diffcallback Класс

class DiffCallback : DiffUtil.ItemCallback<Memo>() {
    override fun areItemsTheSame(oldItem: Memo, newItem: Memo): Boolean {
        return oldItem.id == newItem.id
    }

    override fun areContentsTheSame(oldItem: Memo, newItem: Memo): Boolean {
        return oldItem.title == newItem.title &&
                oldItem.content == newItem.content &&
                oldItem.photos == newItem.photos
    }

}

Даже если предмет превышает экран recyclerview, DiffCallback хорошо знает, что новый предмет прибыл, но recyclerview необходимо прокрутить вниз чтобы увидеть новый элемент, пока он скрыт от сворачивающейся панели инструментов (я полагаю).

Как я могу это решить?


+ и я использую Room DB.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...