【问题标题】:App Widget with ViewModel and Lifecycleowner带有 ViewModel 和 Lifecycleowner 的 App Widget
【发布时间】:2020-04-20 19:43:23
【问题描述】:

我在我的项目中使用 MVVM。但是当我创建 App Widget 时,他在 updateAppWidget() 中不支持 LifecycleOwner

var model: CurrencyViewModel
model = ViewModelProvider(this).get(CurrencyViewModel::class.java)

我有机会从 App Widget 访问模型吗?

【问题讨论】:

  • 什么是App Widget?您想在哪里调用此代码?
  • 小部件是主屏幕自定义的重要方面。您可以将它们想象为应用程序最重要数据和功能的“一目了然”视图,可直接从用户的主屏幕访问。
  • 对,主屏幕上的小部件。我完全忘记了那些存在于 Android 中的东西。

标签: android kotlin mvvm android-lifecycle


【解决方案1】:

这不是 ViewModelProvider 的用途。当小部件运行时,活动可能会连同它的 ViewModel 一起被销毁。 AppWidgetProvider 本身并没有真正的生命周期。

如果您想从 App 中获取数据到 App Widget 中,您应该将其保存在 SharedPreferences 或数据库中。

/**
     * Creates a {@link ViewModelProvider}, which retains ViewModels while a scope of given Activity
     * is alive. More detailed explanation is in {@link ViewModel}.
     * <p>
     * It uses the {@link FragmentActivity#getDefaultViewModelProviderFactory() default factory}
     * to instantiate new ViewModels.
     *
     * @param activity an activity, in whose scope ViewModels should be retained
     * @return a ViewModelProvider instance
     * @deprecated Use the 'by viewModels()' Kotlin property delegate or
     * {@link ViewModelProvider#ViewModelProvider(ViewModelStoreOwner)},
     * passing in the activity.
     */
    @Deprecated
    @NonNull
    @MainThread
    public static ViewModelProvider of(@NonNull FragmentActivity activity) {
        return new ViewModelProvider(activity);
    }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-07-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多