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值的主要内容,如果未能解决你的问题,请参考以下文章

在小部件中单击 textview 时更改图标

如何从小部件上的 TextView 获取默认文本大小?

在小部件中显示进度轮

使用异步数据调用在小部件内绑定“foreach”

在小部件中打开一个活动

android小部件内ListView中的多个可点击项目