Я разрабатываю модуль Android, который в основном состоит из пользовательских представлений. Третьи стороны могут просто перейти к любой из своих действий. Этот модуль включает в себя конфигурацию (на основе PreferenceActivity).Обратный вызов активности Android для Android
Учитывая, что вы не можете начать активность из представления, модуль вызывает «openConfig (намерение намерения)» в действии, в котором он отображается. Это действие действует как делегат для модуля.
Это пока прекрасно работает (хотя мне бы очень хотелось, чтобы модуль обрабатывал все внутренне, никаких методов делегата не требовалось, но я считаю, что это просто невозможно). Однако мне нужен какой-то обратный вызов от активности предпочтений к модулю, так что модуль получит уведомление, когда настройки будут изменены.
Я думал о простом добавлении основного класса модуля в качестве делегата к активности предпочтений;
ConfigActivity a = new ConfigActivity();
a.testVar = "testtest";
Intent intent = new Intent(getContext(), a.getClass());
delegate.handleConfigAction(intent); //
Однако этот тест только с простой строкой (вместо интерфейса) показал, что строка не будет получить набор после начала деятельности.
Вторая мысль заключалась в том, чтобы использовать 'putExtra()' в намерении, но это действительно не подходит для использования, поскольку делегат, который я хотел бы разместить там, действительно представляет собой объект, а не сериализуемый объект данных.
Есть ли какие-либо способы для меня справиться с этим внутренне? Я знаю о функции onActivityResult() (http://developer.android.com/training/basics/intents/result.html), но это будет означать, что стороннему разработчику, использующему мой модуль, нужно будет справиться с этим, чего следует избегать по очевидным причинам.
Любая помощь была бы высоко оценена!
EDIT: окончательное решение В конце концов я изменил модуль с видом на фрагмент, который теперь работает намного лучше с обработкой «ребенок» деятельность и тому подобное. При запуске Activity from the Fragment функция onActivityResult прекрасно работает для выполнения поставленной задачи.
«так, чтобы модуль получил уведомление, когда настройки были изменены» - почему бы не использовать [OnSharedPreferenceChangeListener] (http://developer.android.com/reference/android/content/SharedPreferences.OnSharedPreferenceChangeListener. HTML)? – CommonsWare
Как бы я зарегистрировал этого слушателя? Я имею в виду, что PreferencesActivity начнет работу с представления, а не на активность. – AlBirdie
Имея представление о запуске, деятельность представляет собой недостаток в дизайне, ИМХО. Тем не менее, нет ничего, что останавливало бы «Просмотр» от доступа к «SharedPreferences» и вызова 'setOnSharedPreferenceChangeListener()' перед тем, как запустить эту функцию «PreferenceActivity». – CommonsWare