为什么我的 SharedViewModel 先执行?

why my SharedViewModel is Executing first?

    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()函数是运行ning先?这里的主要问题是什么,

ps,我正在使用悬浮乐趣加载数据

编辑 1: 我的默认可见性是不可见的

<ImageView>
.
.
android:visibility="invisible"

这是我的 ShareViewModel Class 它将检查数据库是否为空

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