如果在初始化过程中解析所有数据,为什么观察者总是得到一个空列表?

我正在用kotlin和存储空间为android制作一个小型任务程序。我将主要活动分为几个片段,然后为每个片段创建一个ViewModel。现在在初始化过程中,我需要程序解析数据库中的所有任务,然后在ListFragment中创建一些radioButtons。观察者工作得很好,但是List<Task>变量始终带有空列表...观察者工作得很好,因为Log.i("ListFragment","List is empty!")确实存在。那是什么问题呢?

以下是一些代码:

class ListFragment : Fragment() {

    override fun onCreateView(
        inflater: LayoutInflater,container: ViewGroup?,savedInstanceState: Bundle?): View? {

        val binding: FragmentListBinding = DataBindingUtil.inflate(
            inflater,R.layout.fragment_list,container,false)

        val application = requireNotNull(this.activity).application

        val dataSource = TaskDatabase.getInstance(application).taskDatabaseDao

        val viewModelFactory = ListViewModelFactory(dataSource,application)

        val listViewModel =
            ViewModelProviders.of(this,viewModelFactory).get(ListViewModel::class.java)

        binding.listViewModel = listViewModel

        binding.setLifecycleowner(this)

        binding.addButton.setOnClicklistener {
            findNavController().navigate(R.id.action_listFragment_to_createtaskFragment)
        }

        listViewModel.tasks.observe(this,Observer {
            Log.i("ListFragment","List is empty!")
            it?.forEach {
                Log.i("ListFragment","tasks exist")
                val radioButton = RadioButton(context)
                radioButton.text = it.title
                radioButton.visibility = View.VISIBLE
                radioButton.setOnClicklistener {
                    Toast.makeText(context,"Working",Toast.LENGTH_SHORT).show()
                }
            }
        })

        return binding.root
    }
}
class ListViewModel(
    val database: TaskDao,application: Application) : AndroidViewModel(application) {

    private val viewModelJob = Job()

    private val uiScope = Coroutinescope(Dispatchers.Main + viewModelJob)

    private val _tasks = MutableLiveData<List<Task>>()
    val tasks: LiveData<List<Task>>
        get() = _tasks

    init {
        initializetasks()
    }

    private fun initializetasks() {
        uiScope.launch {
            _tasks.value = getTasksFromDatabase()?.value
            Log.i("ListViewModel","something")
        }
    }

    private suspend fun getTasksFromDatabase(): LiveData<List<Task>>? {
        return withContext(Dispatchers.IO) {
            database.getallTasks()
        }
    }

    override fun onCleared() {
        super.onCleared()
        viewModelJob.cancel()
    }
}

谢谢您的帮助!

ooohwj 回答:如果在初始化过程中解析所有数据,为什么观察者总是得到一个空列表?

暂时没有好的解决方案,如果你有好的解决方案,请发邮件至:iooj@foxmail.com
本文链接:https://www.f2er.com/3170033.html

大家都在问