Как применить изменения к виджету при размещении его на рабочем столе в onEnabled? - PullRequest
0 голосов
/ 11 октября 2011

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

Итак, что я делаю здесь, это просто запускаю действие в некотором классе предпочтений, где я использую строковый массив, чтобы дать пользователю возможность выбора.И затем OnSharedPreferenceChangeListener внутри onEnabled снова, я начинаю другое действие с URL города.Этот новый класс acitvity будет обрабатывать логику погоды при запуске, когда я впервые пытаюсь разместить виджет погоды на домашнем экране.Поэтому я просто пытаюсь установить некоторые textFields в этом новом классе активности, чтобы они появлялись в виджете, когда я помещал их на экран, но я не могу понять, почему он не применяется.Вот код ниже моего AppWidgetProvider.

public class MyWeatherAppWidgetProvider extends AppWidgetProvider{
private String url;
@Override
public void onEnabled(Context context) {
    // TODO Auto-generated method stub
    super.onEnabled(context);
    final Context this_context = context;

    Intent intent = new Intent(context.getApplicationContext(), EditPrefs.class);
    intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    context.startActivity(intent);

    SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context);

    OnSharedPreferenceChangeListener listener = new SharedPreferences.OnSharedPreferenceChangeListener() { 
           public void onSharedPreferenceChanged(SharedPreferences sharedPreferences,
                    String key) {
               SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this_context);
               url = prefs.getString("cities", "http://www.yr.no/place/Nepal/Bagmati/Kathmandu/forecast.xml");
               System.out.println(url);
               Intent intent = new Intent(this_context.getApplicationContext(), VaxjoWeather.class);
               intent.putExtra("city", url);
               intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
               this_context.startActivity(intent);

            }
        };

    prefs.registerOnSharedPreferenceChangeListener(listener);


    url = prefs.getString("cities", "http://www.yr.no/place/Nepal/Bagmati/Kathmandu/forecast.xml");
    System.out.println(url);

}

1 Ответ

2 голосов
/ 11 октября 2011

Я бы не стал полагаться на onEnabled, чтобы сделать все правильно для вас. Насколько я знаю, все еще есть ошибка, которая позволяет виджетам задерживаться, когда конфигурация виджета отменяется. Это означает, что когда вы размещаете первый виджет и отменяете конфигурацию, Id все еще сохраняется в системе для конкретного AppWidgetProvider, и, таким образом, onEnabled не вызывается, когда вы помещаете его снова, так как он все еще имеет идентификатор «призрак», уже находящийся в его appWidgetProviderIds.

...