Android的appwidget remoteviews没有更新 [英] Android appwidget remoteviews not updating

查看:522
本文介绍了Android的appwidget remoteviews没有更新的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

列表远程视图没有更新(我的意思是刷新本身),当我更新一些活动部件。它配备直至应用程序窗口小部件的onupdate(日志显示出来)。但不进入的列表视图适配器与新鲜数据充气它

 公共无效的OnUpdate(上下文的背景下,AppWidgetManager appWidgetManager,

INT [] appWidgetIds){
    最终诠释N = appWidgetIds.length;
    的for(int i = 0; I&n种;我++){
        INT appWidgetId = appWidgetIds [I]

        Log.e(称为,的onupdate);

        RemoteViews意见=新RemoteViews(context.getPackageName()
                R.layout.widget_lay);

        views.setTextViewText(R.id.textView1,
                浮动文字会显示在这里..每日思考);

        意向意图=新的意图(背景下,RemoteServiceEmin.class);
        intent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID,appWidgetId);
        views.setRemoteAdapter(R.id.gridview,意图);

        //充气列表远程视图

        意图int​​entlist =新的意图(背景下,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);

        //在GridView控件设置的onclick
        意图itemClickIntent =新的意图(背景下,MyWidgetProvider.class);
        itemClickIntent.setAction(ITEM_CLICK_ACTION);
        itemClickIntent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID,
                appWidgetIds [I]);
        PendingIntent itemClickPendingIntent = PendingIntent.getBroadcast(
                上下文,0,itemClickIntent,
                PendingIntent.FLAG_UPDATE_CURRENT);
        views.setPendingIntentTemplate(R.id.gridview,
                itemClickPendingIntent);

        appWidgetManager.updateAppWidget(appWidgetId,意见);
    }
    super.onUpdate(背景下,appWidgetManager,appWidgetIds);

}
 

解决方案

所以,最后的完成,再次都要归功于developer.android.com。所有你需要做的就是,触发从那里你要处理更新广播意图。

 意图initialUpdateIntent =新的意图(
                AppWidgetManager.ACTION_APPWIDGET_UPDATE);
        initialUpdateIntent
                .setAction(AppWidgetManager.ACTION_APPWIDGET_UPDATE);
        sendBroadcast(initialUpdateIntent);
 

,然后抓住它在Appwidget的onRecieve,以及使用更新的远程视窗

  notifyAppWidgetViewDataChanged()。
 

有点像codesnippetbelow

 否则,如果(intent.getAction()。等于(
            AppWidgetManager.ACTION_APPWIDGET_UPDATE)){

         AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(上下文);

            组件名thisAppWidget =新单元名(context.getPackageName(),MyWidgetProvider.class.getName());
            INT [] appWidgetIds = appWidgetManager.getAppWidgetIds(thisAppWidget);
             appWidgetManager.notifyAppWidgetViewDataChanged(appWidgetIds,R.id.listviewnew);
           Log.e(最后一整天后,工作:);

    }
 

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

}

解决方案

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

    }

这篇关于Android的appwidget remoteviews没有更新的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆