#android #kotlin #android-jetpack #android-paging #android-paging-library
#Android #kotlin #android-jetpack #android-подкачка #android-paging-library
Вопрос:
Я использую библиотеку подкачки Android библиотеку комнат.
@Entity
data class Customer {
@PrimaryKey(autoGererate = true)
val id: Long,
val name: String
}
@Dao
interface CustomerDao {
@Query("SELECT * FROM Customer")
fun get(): DataSource.Factory<Int, Customer>
}
Я бы хотел установить флажок в PagedListAdapter, когда пользователь нажимает на элемент клиента.
И я хотел бы предоставить функцию проверки всех элементов во фрагменте.
Отмеченный элемент сохраняется в ViewModel.
Но я не хочу использовать GetItem(int: Position) и функцию notifyItemChanged, как показано ниже.
// in fragment
viewModel.selected.observe(lifecyclerOwner, Observer {
adapter.selectedCustomers = it
})
// in adapter
var selectedCustomers: List<Customer>()
set(value) {
for (i in until itemCount) {
getItem(i)?.id?.let {
if (selected item id is changed) {
notifyItemChanged(i)
}
}
}
}
Это потому, что GetItem вызывает mPagedList.loadAround(index) в AsyncPagedListDiffer
Могу ли я изменить Customer на CheckableCustomer и использовать DiffUtil.ItemCallback вместо notifyDataSetChanged?
data class CheckableCustomer {
val customer: Customer,
val isChecked: Boolean
}
Как изменить источник данных.Factory<Int, Customer> из dao Room db в CheckableCustomer?
Я хочу изменить клиента на CheckableCustomer и использовать PagedListAdapter<CheckableCustomer, VH>(обратный вызов)
Или есть ли какое-нибудь хорошее решение с использованием источника данных базы данных room и флажка?