android - 为什么我的 SharedViewModel 先执行?
问题描述
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
// Inflate the layout for this fragment
val view = inflater.inflate(R.layout.fragment_list, container, false)
val recyclerView = view.findViewById<RecyclerView>(R.id.recyclerView)
recyclerView.adapter = adapter
recyclerView.layoutManager = LinearLayoutManager(requireActivity())
noDataTextView = view.findViewById(R.id.no_data_textView)
noDataImageView = view.findViewById(R.id.no_data_imageView)
mToDoViewModel.getAllData.observe(viewLifecycleOwner, Observer { data ->
adapter.setData(data)
mSharedViewModel.checkIfDatabaseEmpty(data)
})
floatingActionButton = view.findViewById<FloatingActionButton>(R.id.floatingActionButton)
listLayout = view.findViewById(R.id.listLayout)
floatingActionButton.setOnClickListener {
findNavController().navigate(R.id.action_listFragment_to_addFragment)
}
//set menu
setHasOptionsMenu(true)
mSharedViewModel.emptyDatabase.observe(viewLifecycleOwner, Observer { data ->
showEmptyDatabaseViews(data)
})
return view
}
我有一个可见性系统,如果数据库为空,则显示图像。但是当我运行代码时,首先显示图像然后显示数据然后我对其进行调试并看到mSharedViewModel.emptyDatabase.observe()函数首先运行?这里的主要问题是什么,
ps,我正在使用暂停的乐趣来加载数据
编辑 1:我的默认可见性是不可见的
<ImageView>
.
.
android:visibility="invisible"
这是我的 ShareViewModel 类,它将检查数据库是否为空
class SharedViewModel(application: Application) : AndroidViewModel(application) {
val emptyDatabase: MutableLiveData<Boolean> = MutableLiveData(true)
fun checkIfDatabaseEmpty(toDoData: List<ToDoData>){
emptyDatabase.value=toDoData.isEmpty()
}
这是我的 ViewModel
class ToDoViewModel(application: Application):AndroidViewModel(application) {
private val toDoDao= ToDoDatabase.getDatabase(application).ToDoDao()
private val repository:ToDoRepository
val getAllData: LiveData<List<ToDoData>>
init {
repository=ToDoRepository(toDoDao)
getAllData=repository.getAllData
}
解决方案
您的期望:我有一个可见性系统,如果数据库为空,则显示图像。
根据您的代码:
android:visibility="invisible"
默认可见性invisible
没问题,但请检查视图模型代码
val emptyDatabase: MutableLiveData<Boolean> = MutableLiveData(true)
您将值设置为true
。因此,当任何observer
开始observing
更改时,default value
将传递给observer
,因此从逻辑上讲,您的代码是OK
,数据库是empty
,图像视图是visible
。
所以,你应该设置false
为default value
.
推荐阅读
- vba - 如果它们是某种颜色,Excel将所有值从一个主工作表复制到其他各种工作表
- plot - Racket:将剩余参数映射到另一个过程
- python - ModuleNotFoundError:没有名为“object_detection”的模块
- python - 无法在 python 中使用 opencv 读取图像
- html - 将图像大小调整为包含文本的 div
- docker - 在 Elasticbeanstalk Docker 环境中提供 Django 静态文件
- c++ - 当“运算符”函数根据类而不是实际运算符定义时,它们如何工作?
- r - R foreach 并行和包变量
- javascript - 如何在循环的while或foreach中制作动态的其他选项输入框
- javascript - 在提交事件函数调用上使用“return”时引发错误