Прежде всего, исходя из реализации вашей деятельности, вы упустили несколько важных вещей, касающихся деятельности.
<сильный>1. Используйте только статические внутренние классы или автономные классы для AsyncTasks: см. any-100-working/3821998#3821998">Фоновая задача, диалоговое окно прогресса, изменение ориентации - есть ли какое-либо 100% рабочее решение?
Важно вот что:
Шаг 2. Пусть AsyncTask удерживает действие с помощью члена данных, устанавливаемого с помощью конструктора и установщика.
Шаг 5. В onCreate(), если getLastNonConfigurationInstance() не равен null, приведите его к классу AsyncTask и вызовите установщик, чтобы связать новую активность с задачей.
Вы заметите, что вам придется регистрировать и отменять регистрацию ваших компонентов на основе методов жизненного цикла Android. Это важно знать, всегда следите за жизненным циклом Android!
Помня об этом, вы всегда будете приходить к правильным ответам, касающимся отделения Android.
<сильный>2. При необходимости используйте классы хранения данных.
Здесь это не относится к Activity:
// Stores the fetched dataMap
ArrayList<HashMap<String, String>> arrayList;
Когда ваша активность уничтожается, например. во время изменения конфигурации все ваши данные пропали и вам нужно загрузить все заново.
Доступ к данным и их хранение можно осуществлять разными способами: http://developer.android.com/guide/faq/framework.html#3
В вашем случае это может быть применимо:
Общедоступное статическое поле/метод
Альтернативный способ сделать данные доступными между действиями/службами — использовать общедоступные статические поля и/или методы. Вы можете получить доступ к этим статическим полям из любого другого класса вашего приложения. Чтобы поделиться объектом, действие, которое создает ваш объект, устанавливает статическое поле, чтобы оно указывало на этот объект, и любое другое действие, которое хочет использовать этот объект, просто получает доступ к этому статическому полю.
Также подумайте о хранении ваших данных в БД или другими способами, чтобы даже после уничтожения вашего приложения ваши данные не исчезли.
<сильный>3. Связь с вашей активностью может осуществляться следующим образом: http://developer.android.com/guide/components/fragments.html#CommunicatingWithActivity
Таким же образом используйте его для своих представлений и прослушивателей представлений. Имейте компонент, управляющий вашими представлениями (например, фрагмент), зарегистрируйте его в своей деятельности, используйте его, отмените его регистрацию, когда он не нужен или когда этого требует жизненный цикл.
Как сказано в 1., жизненный цикл Android — это ключ ко всему.
<сильный>4. Внедрение зависимостей — очень важная тема, и вы можете либо использовать для этого фреймворк (например, Dagger 2 или RoboGuice), либо сделать это по-своему. Убедитесь, что ваш инжектор знает зависимости (например, каким кнопкам нужны какие ClickListeners и информация или какие данные нужны вашему адаптеру) и свяжите их вместе. Всегда рассматривая жизненный цикл, вы увидите, какие интерфейсы и какие методы вам нужны и когда их вызывать.
<сильный>5. Не беспокойтесь о количестве строк кода. Если ваш дизайн последователен и имеет смысл, у вас не будет проблем с читабельностью даже при 500 строках. Кстати. при правильном документировании вашего кода он легко превышает 150 строк кода. Итак, снова беспокоиться об этом.
Если у вас есть какие-либо конкретные вопросы о деталях реализации, задайте конкретный вопрос, иначе вы получите раздутый ответ.
person
einschnaehkeee
schedule
08.06.2015
C++
friend
или что-то подобное, поэтому я могу передать только объект классаMainActivity.this
и все готово. - person xyz   schedule 05.06.2015String
) — это нормально. Другие огромные классы, вероятно, имеют слишком много обязанностей. Каждый класс должен делать одну вещь по отношению к другой. - person Kevin Krumwiede   schedule 07.06.2015new Bob().getSomething()
. Я писал простой пример, чтобы людям не приходилось читать так много строк, чтобы понять суть. Фиксированный! - person xyz   schedule 08.06.2015MainActivity
абстрагирует именно то, что он должен абстрагировать, и, насколько я могу судить, придерживаетсяOOP
. Я считаю, что концептуально не имеет смысла разделять их. Я просто ищу реализацию, которая позволит мне реализовать это в структуре, которая поддерживает эти отношения, но сохраняет управляемость кода. - person xyz   schedule 08.06.2015