【发布时间】:2017-08-23 16:22:05
【问题描述】:
我想创建一个具有两种小部件尺寸(4x2 和 4x4)的应用。
为此,我创建了两个接收器:
<receiver android:name=".widgets.CloudWidgetProviderLarge" android:label="@string/app_name">
<intent-filter>
<action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
</intent-filter>
<meta-data
android:name="android.appwidget.provider"
android:resource="@xml/widget_large" />
</receiver>
<receiver android:name=".widgets.CloudWidgetProviderMedium" android:label="@string/app_name">
<intent-filter>
<action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
</intent-filter>
<meta-data
android:name="android.appwidget.provider"
android:resource="@xml/widget_medium" />
</receiver>
还有一个配置活动:
<activity android:name=".widgets.WidgetConfigurationActivity">
<intent-filter>
<action android:name="android.appwidget.action.APPWIDGET_CONFIGURE"/>
</intent-filter>
</activity>
这两个 widgetProviders 继承自我的抽象 WidgetBaseProvider 并且只实现不同的部分。
我的问题如下:
具体的 WidgetProvider 类的 onUpdate 方法在配置活动启动时调用,而不是在配置完成时调用。因此在完成配置后不会更新小部件。
到目前为止,我在 WidgetConfigurationActivity 中所做的尝试:
这不会导致更新。不知道有什么问题:
val appWidgetManager = AppWidgetManager.getInstance(this)
val views = RemoteViews(this.packageName, R.layout.widget_newscloud)
appWidgetManager.updateAppWidget(widgetData.widgetId, views)
val result = Intent().putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, widgetData.widgetId)
setResult(Activity.RESULT_OK, result)
finish()
这有效,但显然只适用于一种小部件:
val providerLarge = CloudWidgetProviderLarge()
providerLarge.onUpdate(this, appWidgetManager, intArrayOf(widgetId))
【问题讨论】:
-
你解决了吗?
-
不,我没有解决。
标签: android