有没有办法从widget中的textView项获取值?我在我的小部件布局中有2个textViews,在我的小部件更新中,我想为其中一个设置新值,我不想更改第二个的值。现在我设置这样的值
remoteViews.setTextViewText(R.id.text1, newValue");
widgetManager.updateAppWidget(thisWidget, remoteViews);
这是将第二个textView的值设置为layout中定义的默认值。 如何让它不改变第二个textView的值,或者如何获取第二个textView的值以便能够调整到相同的值?
答案 0 :(得分:4)
我的理解是,每当调用onUpdate
时,它都会更新所有小部件,所以我所做的就是使用SharedPreferences,所以当我最初设置TextView
时,我将textView文本保存到sharedprefs然后我在更新时得到偏好。我在for
循环中完成所有操作。
这是我的onUpdate
:
@Override
public void onUpdate(Context context, AppWidgetManager awm, int[] appWidgetIds){
SharedPreferences pref = PreferenceManager.getDefaultSharedPreferences(context);
int appWidgetId;
for (int i=0;i<appWidgetIds.length;i++){
appWidgetId = appWidgetIds[i];
String widgetLabel = pref.getString("label"+appWidgetId, "");
// I previously saved "widgetLabel" when I created the widget in my
// ConfigurationActivity
M.updateWidget(context, appWidgetId, widgetLabel);
// I put this in another class so it's more manageable.
}
}
在我的班级M:
public static void updateWidget(Context context, int appWidgetId, String widgetLabel){
SharedPreferences.Editor editor = PreferenceManager.getDefaultSharedPreferences(context).edit();
RemoteViews updateViews;
int layoutId = R.layout.layout;
int viewId = R.id.layout;
updateViews = new RemoteViews(context.getPackageName(),
layoutId);
updateViews.setTextViewText(R.id.widgetlabel, widgetLabel);
editor.putString("label"+appWidgetId, widgetLabel);
editor.commit();
Intent intent = new Intent(context, ClickAction.class);
PendingIntent pendingIntent = PendingIntent.getActivity(context, appWidgetId, intent, PendingIntent.FLAG_UPDATE_CURRENT);
updateViews.setOnClickPendingIntent(viewId, pendingIntent);
AppWidgetManager.getInstance(context).updateAppWidget(appWidgetId, updateViews);
}
我希望这是有道理的。如果我需要详细说明,请告诉我。