Я использую <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.