6

我正在开发一个 android 小部件,它在 API 级别 5 或更高级别中运行良好。API 级别 1 或 2 根本不支持它。它在 3 和 4 中应该可以正常工作,但由于某种原因,小部件不会更新。

onUpdate 方法被调用并且没有错误地执行;但是,在 3 和 4 中,它不会更改小部件的文本。我几乎不知所措。有什么想法吗?

@Override
public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) {
    RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.widget);

    DataAccess helper = new DataAccess(context);
    String text = helper.getCurrentText();
    helper.close();

    if (text != null)
        views.setTextViewText(R.id.widget_text, text);

    Intent intent = new Intent(context, WidgetDetailsActivity.class);
    PendingIntent pending = PendingIntent.getActivity(context, 0, intent, 0);
    views.setOnClickPendingIntent(R.id.widget, pending);

    appWidgetManager.updateAppWidget(appWidgetIds, views);
}
4

2 回答 2

0

尝试这个:

在更新方法结束时,您需要调用 super.

@Override
public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) {
    RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.widget);

    DataAccess helper = new DataAccess(context);
    String text = helper.getCurrentText();
    helper.close();

    if (text != null)
        views.setTextViewText(R.id.widget_text, text);

    Intent intent = new Intent(context, WidgetDetailsActivity.class);
    PendingIntent pending = PendingIntent.getActivity(context, 0, intent, 0);
    views.setOnClickPendingIntent(R.id.widget, pending);

    appWidgetManager.updateAppWidget(appWidgetIds, views);

   super.onUpdate(context, appWidgetManager, appWidgetIds);
}
于 2011-08-23T07:58:52.790 回答
0

您需要在更新方法上启动服务并将所有代码也放入服务中,这里我给出 onReceive 和服务演示 context.startService(new Intent(context, UpdateService.class));

public static class UpdateService extends Service {
    @Override
    public void onStart(Intent intent, int startId) {
        // Build the widget update for today
        RemoteViews updateViews = buildUpdate(this);
        // Push update for this widget to the home screen
        ComponentName thisWidget = new ComponentName(this,
                Widget.class);
        AppWidgetManager manager = AppWidgetManager.getInstance(this);
        manager.updateAppWidget(thisWidget, updateViews);
    }

    @Override
    public IBinder onBind(Intent intent) {
        return null;
    }
}

@Override
public void onReceive(Context context, Intent intent) {
    final RemoteViews remoteViews  = buildUpdate(context);
    ComponentName cn = new ComponentName(context, Widget.class);
    AppWidgetManager.getInstance(context).updateAppWidget(cn, remoteViews);
    super.onReceive(context, intent);
}

其中buildUpdate是您的小部件更新代码的方法

于 2012-04-02T06:09:58.717 回答