Android:如何在创建时更新小部件文本

Android:如何在创建时更新小部件文本

问题描述:

我已经看到关于如何更新小部件的几个问题,但没有什么能帮助我解决问题。Android:如何在创建时更新小部件文本

我创建了一个窗口小部件,该窗口小部件具有一个我想在窗口小部件创建时动态更新的textview。 我有一个在屏幕上添加小部件时调用的配置活动。我将该值存储在sharedpreferences中并在Update上检索它。问题是小部件没有得到更新。任何想法如何完成?我不想在点击小部件后更新文本视图,只需获取正确的文本以在创建时显示即可。

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

} 

这实际上更新了文本视图,但只有在单击或创建其他小部件之后。

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

    } 

此代码适用于我。你可以试试这个。

+0

谢谢。它确实有效。我发现我的问题与数据源有关。创建小部件时SharedPreferences为空。 – 2015-03-31 15:09:47

+0

很高兴听到这一点 – MiloRambaldi 2015-03-31 15:18:17