1

我已经开始在我的应用程序中实现一个小部件,并且在将数据从应用程序获取到小部件时遇到了一些麻烦。

这是我的小部件的代码:

public class ElectricityMonitorWidgetProvider extends AppWidgetProvider {

    public static final String WIDGETTAG = "WidgetMood";

    @Override
    public void onUpdate(Context context, AppWidgetManager appWidgetManager,
            int[] appWidgetIds) {
        super.onUpdate(context, appWidgetManager, appWidgetIds);

        System.out.println("Widget onUpdate called..");

        final int N = appWidgetIds.length;

        // Perform this loop procedure for each App Widget that belongs to this provider
        for (int i=0; i<N; i++) {
            int appWidgetId = appWidgetIds[i];
            System.out.println("In loop. App widget id: "+appWidgetId);
        }
    }    
}

在我的小部件中,我只有一个文本视图,我想用我的应用程序中的数字进行更新。应用程序通过 Web 请求获取此号码。

onUpdate()定期运行的方法中,我希望能够更新那个文本视图。

我不确定如何实现这一目标。

我是否需要实现一个小部件调用的帮助器类,并且在该帮助器类中我有与应用程序用于接收它使用的数据相同的方法,还是?

这是我第一次实现小部件。我已经阅读了 developer.android.com 上的小部件指南,这有助于我让小部件显示在我的手机上。我唯一缺少的是我描述的功能。

谢谢你的帮助。

4

1 回答 1

2

把它放在你的小部件更新循环中

for (int i=0; i<N; i++) {
  int appWidgetId = appWidgetIds[i];
  int value = i; //replace with actual value eg from SharedPreferences
  RemoteViews remoteViews = new RemoteViews(context.getPackageName(), R.layout.your_widget);
  remoteViews.setTextViewText(R.id.text_view, String.valueOf(value)); //assumed that R.layout.your_widget contains a TextView with R.id_text_view id

  appWidgetManager.updateAppWidget(appWidgetId, remoteViews);
  System.out.println("In loop. App widget id: "+appWidgetId);
}

请注意,此代码未指定用户触摸小部件时的任何操作(通常您需要指定 PendingIntent 并将其与RemoteViews.setOnClickPendingIntent方法挂钩)。

另外,我建议您在需要时更新您的小部件,而不是定期更新,例如,您的应用程序可以将自定义 Intent 发送到您的 AppWidgetProvider,它会在覆盖onReceive()和更新小部件上的 RemoteViews 中处理它。

于 2013-11-06T22:49:05.723 回答