5

そのため、AppWidgetProviderクラスのonUpdateメソッドで、新しいRemoteViewsオブジェクトを完全に再作成できるように、重要な量のコードを実行することになりました。現実には、更新するたびに、RemoteViewのテキストビューの1つにテキストを設定するだけで済みます。特定のウィジェットがすでに使用しているRemoteViewを変更するだけの方法はありますか?

-カーティス

4

3 に答える 3

18

まず、RemoteViewはビューではありません。これは、ビュー階層を構築する一連の命令です。別のプロセスでビューを再作成するために使用されます(アプリウィジェットはアプリのプロセスでは実行されません)。そのため、シリアル化および変更可能です。

したがって、RemoteViewを初期化するときは、RemoteViewへの参照をどこかに保存するだけです。たとえば、カスタムAppWidgetProviderのフィールドに保存します。次に必要になったときは、フィールドから取得して、何かを変更します。TextViewの文字列を変更するには、を使用しますsetString(..)

remoteView.setString(textViewId, "setText", "some text for TextView")
于 2011-10-11T20:45:16.970 に答える
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);

これは、remoteView.setStringではなく、remoteView.setTextViewTextであることに注意してください。

于 2013-08-28T13:20:23.380 に答える
0

リモートビューを更新してから、

ComponentName componentName= new ComponentName(context, YourClass.class);
AppWidgetManager.getInstance(context).updateAppWidget(componentName, remoteViews);

オン、どのAFAIKがウィジェットを更新する必要があるか

于 2010-12-25T01:22:45.957 に答える