【问题标题】:Android get textView value inside widgetAndroid在小部件内获取textView值
【发布时间】:2012-02-10 01:23:05
【问题描述】:

有没有办法从小部件内的 textView 项目中获取价值?我的小部件布局中有 2 个 textView,在小部件更新时,我想为其中一个设置新值,并且不想更改第二个的值。现在当我像这样设置值时

   remoteViews.setTextViewText(R.id.text1, newValue");
   widgetManager.updateAppWidget(thisWidget, remoteViews);

这是将第二个 textView 的值设置为布局中定义的默认值。 如何让它不改变第二个 textView 的值,或者如何让第二个 textView 的值能够调整到相同?

【问题讨论】:

    标签: android widget 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);
        }
    

    我希望这是有道理的。让我知道是否需要详细说明。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-04-02
      • 2013-10-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多