Android получает значение textView внутри виджета - PullRequest
0 голосов
/ 14 января 2012

Есть ли способ получить значение из элемента textView внутри виджета?У меня есть 2 textViews в моем макете виджета, и при обновлении виджета я хочу установить новое значение для одного из них, и я не хочу изменять значение второго.На данный момент, когда я устанавливаю значение, подобное этому

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

, это установка значения второго textView в значение по умолчанию, определенное в макете.Как заставить его не изменять значение второго textView, или как получить значение для второго textView, чтобы иметь возможность настроить его на то же самое?

1 Ответ

4 голосов
/ 14 января 2012

Насколько я понимаю, всякий раз, когда вызывается 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.
        }



}

в моем классе М:

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

Надеюсь, это имеет смысл. Дайте мне знать, если мне нужно что-то уточнить.

...