i have an interface called IInventoryItem
<code>interface IInventoryItem : Parcelable {
val invAuditDetailId: Int
val itemConditionCode: String
val itemConditionName: String
val itemLotSerialNum: String
val itemCodes: List<IInventoryItemCodes>
var detectedItemRfidCount: Int?
<code>interface IInventoryItem : Parcelable {
val invAuditDetailId: Int
val invAuditItemId: Int
val catalogItemId: Int
val itemName: String
val partNumber: String
val itemUiName: String
val itemConditionCode: String
val itemConditionName: String
val itemLotSerialId: Int
val itemLotSerialNum: String
val expectedQty: Int
val itemCodes: List<IInventoryItemCodes>
var detectedItemRfidCount: Int?
var saved: Boolean?
}
</code>
interface IInventoryItem : Parcelable {
val invAuditDetailId: Int
val invAuditItemId: Int
val catalogItemId: Int
val itemName: String
val partNumber: String
val itemUiName: String
val itemConditionCode: String
val itemConditionName: String
val itemLotSerialId: Int
val itemLotSerialNum: String
val expectedQty: Int
val itemCodes: List<IInventoryItemCodes>
var detectedItemRfidCount: Int?
var saved: Boolean?
}
and i have the adapter
<code>class InventoryItemsAdapter(
recyclerView: RecyclerView,
list: MutableList<IInventoryItem>
) : BaseRecyclerAdapter<IInventoryItem>(recyclerView, list) {
override fun onDispose() {
override fun getViewHolder(p0: Int, p1: LayoutInflater, p2: ViewGroup?): ViewHolder {
return VH(AdapterInventoryingItemCardBinding.inflate(p1, p2, false))
inner class VH(viewBinding: ViewBinding) :
BaseRecyclerAdapter<IInventoryItem>.ViewHolder(viewBinding) {
override fun getViewBinding(): AdapterInventoryingItemCardBinding {
return super.getViewBinding() as AdapterInventoryingItemCardBinding
override fun setValues(item: c) {
itemNameTv.text = item.itemName
itemSerialNumberLotTv.text = item.itemLotSerialNum
partNumberTv.text = item.partNumber
itemUiNameTv.text = item.itemUiName
itemConditionNameTv.text = item.itemConditionName
expectedQtyTv.text = item.expectedQty.toString()
detectedQtyTv.text = (item.detectedItemRfidCount ?: 0).toString()
<code>class InventoryItemsAdapter(
recyclerView: RecyclerView,
list: MutableList<IInventoryItem>
) : BaseRecyclerAdapter<IInventoryItem>(recyclerView, list) {
override fun onDispose() {
}
override fun getViewHolder(p0: Int, p1: LayoutInflater, p2: ViewGroup?): ViewHolder {
return VH(AdapterInventoryingItemCardBinding.inflate(p1, p2, false))
}
inner class VH(viewBinding: ViewBinding) :
BaseRecyclerAdapter<IInventoryItem>.ViewHolder(viewBinding) {
override fun getViewBinding(): AdapterInventoryingItemCardBinding {
return super.getViewBinding() as AdapterInventoryingItemCardBinding
}
override fun setValues(item: c) {
viewBinding.apply {
itemNameTv.text = item.itemName
itemSerialNumberLotTv.text = item.itemLotSerialNum
partNumberTv.text = item.partNumber
itemUiNameTv.text = item.itemUiName
itemConditionNameTv.text = item.itemConditionName
expectedQtyTv.text = item.expectedQty.toString()
detectedQtyTv.text = (item.detectedItemRfidCount ?: 0).toString()
}
}
</code>
class InventoryItemsAdapter(
recyclerView: RecyclerView,
list: MutableList<IInventoryItem>
) : BaseRecyclerAdapter<IInventoryItem>(recyclerView, list) {
override fun onDispose() {
}
override fun getViewHolder(p0: Int, p1: LayoutInflater, p2: ViewGroup?): ViewHolder {
return VH(AdapterInventoryingItemCardBinding.inflate(p1, p2, false))
}
inner class VH(viewBinding: ViewBinding) :
BaseRecyclerAdapter<IInventoryItem>.ViewHolder(viewBinding) {
override fun getViewBinding(): AdapterInventoryingItemCardBinding {
return super.getViewBinding() as AdapterInventoryingItemCardBinding
}
override fun setValues(item: c) {
viewBinding.apply {
itemNameTv.text = item.itemName
itemSerialNumberLotTv.text = item.itemLotSerialNum
partNumberTv.text = item.partNumber
itemUiNameTv.text = item.itemUiName
itemConditionNameTv.text = item.itemConditionName
expectedQtyTv.text = item.expectedQty.toString()
detectedQtyTv.text = (item.detectedItemRfidCount ?: 0).toString()
}
}
inside the ViewModel i update the value of item.detectedItemRfidCount, which is
<code> val iteminventoryRepository.getInventoryItem(inventoryAudit.invAuditDetailId,codes.invAuditItemId
?: error("must not be null, must set at retrieve items step")
for (Detected in detectedItems) {
if (Detected.catalogItemId == item.catalogItemId) {
Detected.detectedItemRfidCount = Detected.detectedItemRfidCount?.plus(1);
<code> val iteminventoryRepository.getInventoryItem(inventoryAudit.invAuditDetailId,codes.invAuditItemId
?: error("must not be null, must set at retrieve items step")
)
for (Detected in detectedItems) {
if (Detected.catalogItemId == item.catalogItemId) {
Detected.detectedItemRfidCount = Detected.detectedItemRfidCount?.plus(1);
}
</code>
val iteminventoryRepository.getInventoryItem(inventoryAudit.invAuditDetailId,codes.invAuditItemId
?: error("must not be null, must set at retrieve items step")
)
for (Detected in detectedItems) {
if (Detected.catalogItemId == item.catalogItemId) {
Detected.detectedItemRfidCount = Detected.detectedItemRfidCount?.plus(1);
}
i want to update detectedQtyTv in the adapter immediately whenever Detected.detectedItemRfidCount value is changed , keeping the type of detectedItemRfidCount inside IInventoryItem as Int as it is , and detectedItems as MutableList as it is not changing to liveData
i tried to add a new attribute inside IInventoryItem of Type MutableLiveData<Int> , but when retrieving the item from RoomDatabase there is an issue because the return type of inventoryRepository.getInventoryItem(inventoryAudit.invAuditDetailId,codes.invAuditItemId) is IInventoryItem not LiveData