Android在小部件内获取textView值
Posted
技术标签:
【中文标题】Android在小部件内获取textView值【英文标题】:Android get textView value inside widget 【发布时间】:2012-02-10 01:23:05 【问题描述】:有没有办法从小部件内的 textView 项目中获取价值?我的小部件布局中有 2 个 textView,在小部件更新时,我想为其中一个设置新值,并且不想更改第二个的值。现在当我像这样设置值时
remoteViews.setTextViewText(R.id.text1, newValue");
widgetManager.updateAppWidget(thisWidget, remoteViews);
这是将第二个 textView 的值设置为布局中定义的默认值。 如何让它不改变第二个 textView 的值,或者如何让第二个 textView 的值能够调整到相同?
【问题讨论】:
【参考方案1】:我的理解是,每当调用 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);
我希望这是有道理的。让我知道是否需要详细说明。
【讨论】:
以上是关于Android在小部件内获取textView值的主要内容,如果未能解决你的问题,请参考以下文章