【发布时间】:2018-11-21 07:51:59
【问题描述】:
这个主题的小故事:应用程序只是在确认时使用对话框更新点击行的值。在房间数据库上使用分页场景。
当添加或删除项目时,会获取最新的数据集并将其传递给 submitList 方法,然后所有更改都可以看到并正常运行。
问题从这里开始,如果更新了现有项目,则再次正确获取最新数据集并传递给 submitList,但这次似乎没有更改。
当我调试DIFF_CALLBACK 并在areItemsTheSame 中捕获我的项目时,newHistory 和oldHistory 的值是相同的! (如何!)
submitList 方法中可能有任何错误?
- 房间 v. : 2.1.0-alpha02
- 分页诉:2.1.0-beta01
初始化后,observe 从房间中获取列表并传递给mHistoryAdapter.submitList(it)。然后,如果我更新一个项目,则再次触发观察(并且我在参数it 中看到更新的值)并传递给submitList。
很遗憾,适配器不会改变...
mResolvedAddressViewModel = ViewModelProviders.of(this).get(ResolvedAddressViewModel::class.java)
mResolvedAddressViewModel.getAddresses(false).observe(this, Observer {
mHistoryAdapter.submitList(it)
})
所有部分
型号
@Parcelize
@Entity
data class ResolvedAddress(
@PrimaryKey var id: String = UUID.randomUUID().toString(),
var requestedLat: Double = 0.0,
var requestedLon: Double = 0.0,
var requestedAddress: String = "",
var lat: Double,
var lon: Double,
var address: String,
var country: String,
var countryCode: String,
var city: String,
var alias: String? = null,
var favorite: Boolean = false,
var provider: String? = null,
var lastUseDate: Long = 0L) : Parcelable
适配器
class HistoryAdapter(var context: Context)
: PagedListAdapter<ResolvedAddress, HistoryItemHolder>(DIFF_CALLBACK) {
companion object {
private val DIFF_CALLBACK = object : DiffUtil.ItemCallback<ResolvedAddress>() {
override fun areItemsTheSame(
oldHistory: ResolvedAddress, newHistory: ResolvedAddress): Boolean {
return oldHistory.id == newHistory.id
}
override fun areContentsTheSame(
oldHistory: ResolvedAddress, newHistory: ResolvedAddress): Boolean {
return oldHistory == newHistory
}
}
}
}
片段
class HistoryFragment : Fragment() {
private lateinit var mHistoryAdapter: HistoryAdapter
private lateinit var mResolvedAddressViewModel: ResolvedAddressViewModel
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?): View? {
return inflater.inflate(R.layout.fragment_history, container, false)
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
recyclerViewHistory.setHasFixedSize(true)
recyclerViewHistory.layoutManager = LinearLayoutManager(activity)
recyclerViewHistory.itemAnimator = DefaultItemAnimator()
mHistoryAdapter = HistoryAdapter(context!!)
recyclerViewHistory.adapter = mHistoryAdapter
mResolvedAddressViewModel = ViewModelProviders.of(this)
.get(ResolvedAddressViewModel::class.java)
mResolvedAddressViewModel.getAddresses(false).observe(this, Observer {
mHistoryAdapter.submitList(it)
})
}
}
【问题讨论】:
标签: android android-architecture-components androidx android-paging