Quantcast
Channel: 質問!ITmedia 新着質問(Java/253)
Viewing all articles
Browse latest Browse all 2439

Android ウィジェットのListView

$
0
0
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を表示・更新など参考になるページがあれば教えてください。

Viewing all articles
Browse latest Browse all 2439

Trending Articles