2012-03-11 4 views
1

В моей деятельности, по желанию пользователя для экрана настроек, звоню:Android: вызов метода от вызова активности

startActivity(new Intent(this, Preferences.class)); 

Preferences класс определяется следующим образом:

public class Preferences extends PreferenceActivity implements OnSharedPreferenceChangeListener { 
    ... 
    public void onSharedPreferenceChanged(SharedPreferences prefs, String key) { 
     ... 
    } 

} 

Мне нужно реализовать OnSharedPreferenceChangeListener в моем классе Preferences, потому что я хочу иметь возможность - например - отключить элемент предпочтений на основе определенного выбора. Но мне нужно было бы реализовать его в своей основной деятельности, чтобы реагировать на изменения предпочтений.

К сожалению onSharedPreferenceChanged() срабатывает только в моем классе Preferences, а не в моем основном действии: как я могу заставить его запускаться в ботовую деятельность?

Или - как я могу вручную вызвать onSharedPreferenceChanged() в моем основном действии из onSharedPreferenceChanged() в деятельности Preferences?

ответ

2

в своей основной деятельности, вы можете зарегистрировать прослушиватель для префов изменений:

SharedPreferences prefs = PreferenceManager 
    .getDefaultSharedPreferences(this); 
prefs.registerOnSharedPreferenceChangeListener(this); 

, а затем вы можете реализовать SharedPreferences.OnSharedPreferenceChangeListener в своей деятельности, с вашим собственным onSharedPreferenceChanged методом.

+0

Спасибо !!! Я уже делал registerOnSharedPreferenceChangeListener() в своем основном действии, но по какой-то причине он был прокомментирован! Спасибо за ваше проворство ... – MarcoS

0

Если вы хотите, чтобы некоторые функции были доступны из обоих видов деятельности, вам лучше всего это сделать, включив этот код в статический метод, который можно вызывать из любого места. В действиях Android развязаны, у вас действительно нет доступа из одного действия к экземпляру какой-либо другой активности.

1

Ну, мало смысла наблюдать за изменением предпочтений в активности, которая в настоящее время не активна. Вы должны обрабатывать события жизненного цикла своей основной деятельности, а не onResume, onRestart и т. Д.

Смежные вопросы