只是更新一个小部件RemoteViews而不是完全创建一个新的?

Kur*_*aum 4 android onupdate android-widget

因此,在我的AppWidgetProvider类中的onUpdate方法中,我最终执行了一些非常重要的代码,以便我可以完全重新创建一个新的RemoteViews对象.实际情况是,我真的只需要在每次更新时在RemoteView中的一个textview中设置文本.反正只是修改特定小部件已经使用的RemoteViews吗?

-Kurtis

Pet*_*ego 17

首先,RemoteView不是View.它是一组构建View层次结构的指令.它用于在另一个进程中重新创建View(App Widgets不会在您的应用程序的进程中执行).因此它是可序列化和可变的.

因此,当您初始化RemoteView时,只需在某处存储对它的引用,例如在自定义AppWidgetProvider的字段中.下次需要时,从现场获取并更改其中的内容.用于在TextView中更改字符串使用setString(..).

remoteView.setString(textViewId, "setText", "some text for TextView")
Run Code Online (Sandbox Code Playgroud)

  • 我很想做到这一点,但静态var假设你只有一个小部件,不是吗?如果有多个小部件,每个小部件都有自己的RemoteViews实例,则无法使用.我很想将RemoteViews保存为AppWidgetOptions的parcelable,AppWidgetOptions是按小部件ID设置的. (2认同)

Mar*_*asa 17

如果您使用的是当前的API,那么这是2013年的更新.在将执行更新的WidgetProvider类方法中:

AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(context);
rv = new RemoteViews(context.getPackageName(), R.layout.widgetlayout); 
rv.setTextViewText(R.id.ofTextViewInWidgetLayoutXML, "Hello World");
appWidgetManager.partiallyUpdateAppWidget(appWidgetIds[i], rv);
Run Code Online (Sandbox Code Playgroud)

请注意,它不再是remoteView.setString而是remoteView.setTextViewText