AppWidget RemoteView Factory возвращает неверные данные из базы данных области - PullRequest
1 голос
/ 09 июля 2020

У меня есть виджет приложения, содержащий список. Когда я щелкаю элемент, он обновляет базу данных о том, что эта задача завершена, и скроет ее в виджете приложения. Проблема в том, что при обновлении onDataSetChange() из RemoteViewFactory загружает базу данных с неверными данными. Я действительно запуталась. Вот результат

resultTest: from widget provider data is true
resultTest: data is from app widget factory false 

Вы можете видеть, что когда я обновляю его, я проверяю, обновлена ​​ли база данных. в первом тесте результата он дает true, но после вызова notifyAppWidgetViewDataChanged результат в базе данных ложный. я запутался. Почему он это делает?

Вот мой код в onreceive в моем классе AppWidgetProvider

override fun onReceive(context: Context, intent: Intent) {
    when(intent.action) {
        ACTION_SAMPLE -> {
            val repositoryHelper = context.applicationContext as RepositoryHelper
            repo = WidgetRepo(repositoryHelper)
            repo?.let {
                val remotePresenter = RemotePresenterImp(it,this)
                val id = intent.getLongExtra("ID", 0)
                remotePresenter.marker(id, true){

                    val testCheck = repo?.getTask()
                    testCheck?.forEach {
                        Log.d("resultTest","from widget provider data is ${it.marked}") --> data is change to true
                    }
                    val mgr = AppWidgetManager.getInstance(context)
                    val appWidgetId = intent.getIntExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, AppWidgetManager.INVALID_APPWIDGET_ID)
                    mgr.notifyAppWidgetViewDataChanged(appWidgetId, R.id.listTask)
                }
            }
    }

    super.onReceive(context, intent)
}

Тогда на моем RemoteViewFactory

override fun onDataSetChanged() {
    val repo = WidgetRepo(repositoryHelper)
    repo.let {
        presenter = WidgetPresenter(it)
        val result = presenter.getTask()
        result?.forEach {
            Log.d("resultTest","data is from app widget factory ${it.marked} "). ---> still false
        }
    }
}

Любые идеи относительно того, почему мои данные в RemoteViewFactory не меняются?

...