Android appwidget remoteviews 不更新

标签 android android-appwidget appwidgetprovider

当我从某些 Activity 更新小部件时,列表远程 View 没有更新(我的意思是刷新自身)。它出现直到应用程序小部件的更新(显示日志)。但不会进入 ListView 的适配器以使用新数据对其进行膨胀。

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);

}

最佳答案

所以终于完成了,再次感谢 developer.android.com。您需要做的就是,从您要处理“更新”的地方触发一个广播 Intent 。

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

然后在 Appwidget 的 onRecieve 中捕获它,并使用

更新 Remoteview
 notifyAppWidgetViewDataChanged(). 

类似于下面的代码 fragment

 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 :");  

    }

关于Android appwidget remoteviews 不更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18119925/

相关文章:

android - 在android中动态填充 map

android - 小部件中的 ListView 在滚动和调整大小时随机添加项目(嵌套远程 View )

android - 如何获取appwidget的位置?

android - 小部件中的图像

Android - WallpaperService 为什么我的引擎必须是内部类?

java - 重力底部,文字不向上滚动

java - 更新应用程序小部件显示不同的布局

android - appWidget 仅在 Lollipop 设备的启动器小部件列表中不显示

java - 使用 URL 设置图像失败

安卓 : instumentation testing for app widgets