Android appwidget remoteviews not updating

北战南征 提交于 2020-01-13 05:58:46

问题


List remote view is not updating (I mean refreshing itself) when I am updating the widget from some activity. It comes up till onUpdate of app widget (log showing up). but does not enter into adaptor of list view to inflate it with fresh data .

public void onUpdate(Context context, AppWidgetManager appWidgetManager,

int[] appWidgetIds) {
    final int N = appWidgetIds.length;
    for (int i = 0; i < N; i++) {
        int appWidgetId = appWidgetIds[i];

        Log.e("called", "onupdate");

        RemoteViews views = new RemoteViews(context.getPackageName(),
                R.layout.widget_lay);

        views.setTextViewText(R.id.textView1,
                "Floating Text will be displayed here .. Daily Thoughts");

        Intent intent = new Intent(context, RemoteServiceEmin.class);
        intent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetId);
        views.setRemoteAdapter(R.id.gridview, intent);

        // inflating list remote view

        Intent intentlist = new Intent(context, ListInflater.class);
        intentlist.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID,
                appWidgetId);
        intent.setData(Uri.parse(intent.toUri(Intent.URI_INTENT_SCHEME)));
        views.setRemoteAdapter(R.id.listview, intentlist);

        // setting onclick on gridview
        Intent itemClickIntent = new Intent(context, MyWidgetProvider.class);
        itemClickIntent.setAction(ITEM_CLICK_ACTION);
        itemClickIntent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID,
                appWidgetIds[i]);
        PendingIntent itemClickPendingIntent = PendingIntent.getBroadcast(
                context, 0, itemClickIntent,
                PendingIntent.FLAG_UPDATE_CURRENT);
        views.setPendingIntentTemplate(R.id.gridview,
                itemClickPendingIntent);

        appWidgetManager.updateAppWidget(appWidgetId, views);
    }
    super.onUpdate(context, appWidgetManager, appWidgetIds);

}

回答1:


So Finally its done and again all thanks to developer.android.com . All you need to do is , Trigger a broadcast intent from where you you want to handle "update " .

Intent initialUpdateIntent = new Intent(
                AppWidgetManager.ACTION_APPWIDGET_UPDATE);
        initialUpdateIntent
                .setAction(AppWidgetManager.ACTION_APPWIDGET_UPDATE);
        sendBroadcast(initialUpdateIntent);

and then catch it in onRecieve of Appwidget , and update the Remoteview using

 notifyAppWidgetViewDataChanged(). 

Something like the codesnippetbelow

 else if (intent.getAction().equals(
            AppWidgetManager.ACTION_APPWIDGET_UPDATE)) {

         AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(context);

            ComponentName thisAppWidget = new ComponentName(context.getPackageName(), MyWidgetProvider.class.getName());
            int[] appWidgetIds = appWidgetManager.getAppWidgetIds(thisAppWidget);
             appWidgetManager.notifyAppWidgetViewDataChanged(appWidgetIds,  R.id.listviewnew);
           Log.e("finally after a whole day", "working :");  

    }


来源:https://stackoverflow.com/questions/18119925/android-appwidget-remoteviews-not-updating

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!