有一个片段DescriptionFragment
:
class DescriptionFragment : Fragment() {
private var binding : FragmentDescriptionBinding? = null
private val descriptionViewModel : DescriptionViewModel by viewModel()
val position: Int = getArguments()?.getInt("position", 0) ?: 0
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
binding = DataBindingUtil.inflate(inflater, R.layout.fragment_description, container, false)
binding?.name?.text = descriptionViewModel.loadDescription.value?.get(position)?.name
Log.d("OnClick", "name во втором фрагменте " + descriptionViewModel.loadDescription.value?.get(position)?.name)
binding?.date?.text = descriptionViewModel.loadDescription.value?.get(position)?.date
binding?.description?.text = descriptionViewModel.loadDescription.value?.get(position)?.description
return binding?.root
}
}
它应该从数据库中获取数据Room
到文本字段中。问题是它到达那里null
。
Log "OnClick"
写name во втором фрагменте null
但是 UseCase 仍然存在一些问题(如果我正确理解了日志中写的内容):
Log "OnClick"
写DescriptionUseCase androidx.room.RoomTrackingLiveData@20ac29a
DataSourceIMPL
:
class DataSourceIMPL (private val dao: NameListDao):
RDDataSource {
override fun insert(paginationLocalModel: PaginationLocalModel) {
CoroutineScope(Dispatchers.IO).launch {
dao.insert(paginationLocalModel)}
}
override fun loadNameList(): LiveData<List<PaginationLocalModel>> {
return dao.loadNameList()
}
override suspend fun clear() {
CoroutineScope(Dispatchers.IO).launch {
dao.clear()}
}
}
NameListDao
:
@Dao
interface NameListDao {
@Insert(onConflict = OnConflictStrategy.REPLACE)
fun insert(paginationLocalModel: PaginationLocalModel)
@Query("SELECT * FROM pagination_table")
fun loadNameList() : LiveData<List<PaginationLocalModel>>
@Query("DELETE FROM pagination_table")
suspend fun clear()
}
DescriptionRepository
:
class DescriptionRepository(private val dataSource: RDDataSource) : DescriptionCall {
override fun loadDescription(): LiveData<List<PaginationLocalModel>> {
return dataSource.loadNameList()
}
}
DescriptionUseCase
:
class DescriptionUseCase(private val descriptionCall: DescriptionCall) {
fun loadDescription(): LiveData<List<PaginationLocalModel>> {
Log.d("OnClick", "DescriptionUseCase " + descriptionCall.loadDescription())
return descriptionCall.loadDescription()
}
}
DescriptionViewModel
:
class DescriptionViewModel(private val descriptionUseCase: DescriptionUseCase) : ViewModel() {
val loadDescription = descriptionUseCase.loadDescription()
}
PaginationLocalModel
:
@Entity(tableName = "pagination_table")
class PaginationLocalModel (
@PrimaryKey(autoGenerate = true)
@ColumnInfo(name = "id")
val id: Int,
@ColumnInfo(name = "name")
val name: String,
@ColumnInfo(name = "date")
val date: String,
@ColumnInfo(name = "description")
val description: String
)
需要更换
在