2012-11-02 29 views
9

に取り組んでいないのでにonUpdate方法は、ウィジェット内のリストビューに、アダプタを適用するためにAndroidのホーム画面のウィジェット:RemoteViews setRemoteAdapter(...)メソッドAPI 11+

remoteViews.setRemoteAdapter(id, R.id.listview, intent)

を呼び出します。

ウィジェットのヘッダーには、リストビューによって表示されるデータセットを変更できるボタンがあります(仮想メールウィジェットの受信ボックス、送信ボックス、スター付きなど)。そのボタンをクリックすると、ユーザーはアクティビティに移動し、表示するデータセットを選択できます。選択が行われると、次のコードが実行されます。

Intent intent = new Intent(this, WidgetReceiver.class); 
intent.setAction("android.appwidget.action.APPWIDGET_UPDATE"); 
intent.putExtra("notify", true); 
intent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_IDS, new int[] {R.xml.widget_provider}); 
sendBroadcast(intent); 

は、これが成功し、ウィジェットのAppWidgetProviderクラス内にonUpdateメソッドを呼び出します。しかし、異なるタイプのデータセットを切り替える場合、2-3の設定変更の後に、setRemoteAdapterメソッドが機能しなくなります。私は広範囲にプロセスを記録しており、メソッドを呼び出すと、RemoteViewsService.RemoteViewsFactoryクラスをロードしてウィジェットとそのアダプタにデータを取り込みますが、これらの処理は実行されません。あなたが好みを変える最初のカップル回、期待どおりに動作します。しかしその後、それは終了する。

ここで何が起こっているのか誰かが知りませんか?

答えて

10

奇妙ですが、解決策が見つかりました。 AndroidはあなたのonUpdateメソッドで使用するインテントをキャッシュしているようです。あなたが同じ意図であると思われるものを再送した場合、それはあなたが期待していたとおりには動作しません。

解決策:インテント・エクストラにパラメータとして含める静的反復整数を使用します。それは私の問題を解決しました。

Intent intent = new Intent(context, WidgetService.class); 
intent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, currentWidgetId); 
intent.putExtra("random", randomNumber); 
randomNumber++; 
intent.setData(Uri.parse(intent.toUri(Intent.URI_INTENT_SCHEME))); 

ああ、アンドロイド...

+0

HIJMRboosties。コードを分かち合うだけの親切な態度ですか?また、ListViewをホーム画面ウィジェットに配置し、いくつかのボタンを持つヘッダを追加しようとしています(どのデータセットがリストビューによって表示されるかを変更することができます)。ヘッダーボタンのクリックを登録してリストビューを更新するのが難しいです。 Txs – Hubert

+1

これはすべてのアップデートで起こるようです - 最終的にAndroidは飽きてきて正しい結果が得られると仮定します:/ Thanks @JMRboosties :) – Graeme

+0

あなたがアップグレードしてあなたのアプリが新しいバージョン、それを解決するには? – 2cupsOfTech

1

私はいくつかの時間前にこの問題に直面しました。乱数によるこのアプローチは私にも役立ちました。

関連する問題