Androidの開発をしています。 ウィジェットでListViewを表示させて、更新ボタンを押すとリストが更新するという 動きをしたいのですが、更新ボタンを押しても保持しているデータは更新されても ListView(画面)上は変化ありません。 更新ボタンを押したときにListWidgetService.classに行かないのが原因ですが、なぜいかないのかがわかりません・・・。 色々調べていらないコードなどあるかもしれませんが、簡単にコードを書きます。 [ListWidgetProvider.class] public class ListWidgetProvider extends AppWidgetProvider { public static final String ACTION_ON_CLICK = "com.example.scheduleview.ACTION_ON_CLICK"; @Override public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) { super.onUpdate(context, appWidgetManager, appWidgetIds); RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.listwidget_layout); //ListView Intent intent = new Intent(context, ListWidgetService.class); intent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_IDS, appWidgetIds); intent.setData(Uri.parse(intent.toUri(Intent.URI_INTENT_SCHEME))); views.setRemoteAdapter(R.id.listView, intent); views.setEmptyView(R.id.listView, R.id.empty_view); //更新ボタン Intent btnClickIntent = new Intent(context,ListWidgetProvider.class); btnClickIntent.setAction(ListWidgetProvider.ACTION_ON_CLICK); PendingIntent btnClickPendingIntent = PendingIntent.getBroadcast(context,0,btnClickIntent,PendingIntent.FLAG_UPDATE_CURRENT); views.setOnClickPendingIntent(R.id.btn, btnClickPendingIntent); appWidgetManager.updateAppWidget(appWidgetIds, views); } } @Override public void onReceive(Context context, Intent intent) { if(intent.getAction().equals(ACTION_ON_CLICK)){ AppWidgetManager widgetManager = AppWidgetManager.getInstance(context); ComponentName widgetComponent = new ComponentName(context, ListWidgetService.class); int[] widgetIds = widgetManager.getAppWidgetIds(widgetComponent); Intent update = new Intent(); update.putExtra(AppWidgetManager.EXTRA_APPWIDGET_IDS, widgetIds); update.setAction(AppWidgetManager.ACTION_APPWIDGET_UPDATE); context.sendBroadcast(update); }else if(AppWidgetManager.ACTION_APPWIDGET_UPDATE.equals(intent.getAction())) { Bundle extras = intent.getExtras(); if (extras != null) { ComponentName notifiationsWidget = new ComponentName(context, ListWidgetProvider.class ); AppWidgetManager widgetManager = AppWidgetManager.getInstance(context); int[] appWidgetIds = widgetManager.getAppWidgetIds(notifiationsWidget); if (appWidgetIds != null && appWidgetIds.length > 0) { this.onUpdate(context, AppWidgetManager.getInstance(context), appWidgetIds); } } } super.onReceive(context, intent); } [ListWidgetService.class] public class ListWidgetService extends RemoteViewsService { @Override public RemoteViewsFactory onGetViewFactory(Intent intent) { List naiyou = new ArrayList();//ウィジェット表示用List return new ListRemoteViewFactory(this.getApplicationContext(),intent,naiyou); } } class ListRemoteViewFactory implements RemoteViewsService.RemoteViewsFactory{ private List mData = new ArrayList();//ウィジェット表示用List private Context mContext; public ListRemoteViewFactory(Context context,Intent intent,List data){ mContext = context; mData = data; } @Override public RemoteViews getViewAt(int position) { //リストビューの表示処理をしています。 } } 必要なものがあれば追記しますので、よろしくお願いします。 また、ウィジェットでListViewを表示・更新など参考になるページがあれば教えてください。
↧