【问题标题】:Android: How to update widget text on creationAndroid:如何在创建时更新小部件文本
【发布时间】:2015-03-31 15:24:33
【问题描述】:

我看到了几个关于如何更新小部件的问题,但没有任何帮助解决我的问题。

我创建了一个具有文本视图的小部件,我希望在创建小部件时动态更新它。 我有一个在屏幕上添加小部件时调用的配置活动。我将值存储在 sharedpreferences 中并在更新时检索它。问题是小部件没有得到更新。知道怎么做吗?我不想在单击小部件后更新文本视图,只需在创建时显示正确的文本。

public class AndroidWidget extends AppWidgetProvider {

@Override

public void onUpdate(Context context, AppWidgetManager appWidgetManager,
        int[] appWidgetIds) {

    ComponentName thisWidget = new ComponentName(context,
            AndroidWidget.class);

    int[] allWidgetInstancesIds = appWidgetManager
            .getAppWidgetIds(thisWidget);
    for (int widgetId : allWidgetInstancesIds) {
        RemoteViews remoteViews = new RemoteViews(context.getPackageName(),
                R.layout.widget_layout);

        // Create an intent that when received will launch the PopUpActivity
        Intent intent = new Intent(context, AndroidWidget.class);
        intent.setAction(SHOW_POPUP_DIALOG_ACTION);
        intent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, widgetId);

        PendingIntent pendingIntent = PendingIntent.getBroadcast(context,
                widgetId, intent, 0);

        // Set up the onClickListener of the widget

        remoteViews.setOnClickPendingIntent(R.id.myText, pendingIntent);

        SharedPreferences prefs = context.getSharedPreferences(
                String.valueOf(widgetId), Context.MODE_PRIVATE);

        remoteViews.setTextViewText(R.id.myText,
                prefs.getString("storedtext", null));

        appWidgetManager.updateAppWidget(widgetId, remoteViews);

    }

    super.onUpdate(context, appWidgetManager, appWidgetIds);

}

这实际上会更新文本视图,但仅在单击或创建另一个小部件之后。

【问题讨论】:

    标签: android widget


    【解决方案1】:
    @Override
        public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) {
    
            //set widget id
            ComponentName thisWidget = new ComponentName(context, WidgetProvider.class);
            int[] allWidgetIds = appWidgetManager.getAppWidgetIds(thisWidget);
    
            for (int i = 0; i < appWidgetIds.length; i++) {
                Intent intentService = new Intent(context, WidgetService.class);
    
                intentService.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetIds[i]);
                intentService.setData(Uri.parse(intentService.toUri(Intent.URI_INTENT_SCHEME)));
    
                RemoteViews widget = new RemoteViews(context.getPackageName(), R.layout.widget);
    
                Intent clickIntent = new Intent(context, MainActivity.class);
                PendingIntent clickPI = PendingIntent.getActivity(context, 0, clickIntent, PendingIntent.FLAG_UPDATE_CURRENT);
    
                widget.setTextViewText(R.id.currency, " Dollar");
    
                appWidgetManager.updateAppWidget(appWidgetIds[i], widget);
            }
            super.onUpdate(context, appWidgetManager, appWidgetIds);
    
        }
    

    此代码对我有用。你可以试试这个。

    【讨论】:

    • 谢谢。它确实有效。我发现我的问题出在数据源上。 SharedPreferences 在小部件创建时为空。
    猜你喜欢
    • 2023-01-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-08
    • 2021-04-28
    • 1970-01-01
    • 2021-10-02
    • 2013-05-05
    相关资源
    最近更新 更多