#android #conventions
#Android #соглашения
Вопрос:
В частности, какие соглашения с точки зрения действий соблюдаются? Если я создаю программу со многими экранами, должен ли я создавать действие для каждого экрана?
Если я хочу правильно перемещаться между действиями, должен ли я придерживаться намерений в каждом действии? Я хочу сделать этот код максимально чистым и эффективным
Ответ №1:
Короче говоря: да.
Хотя вы можете обойти это, динамически изменяя свой пользовательский интерфейс внутри одного действия, Android рекомендует, чтобы каждое действие приложения было закодировано в отдельном классе действий.
Посмотрите эту неплохую статью о рекомендуемом способе Android.
Этот шаблон проектирования намерений / действий имеет много преимуществ, одно из которых заключается в том, что вы можете переопределять и расширять другие действия приложения своими собственными с помощью соответствующих фильтров намерений.
Я вижу, что вы обеспокоены эффективностью. Будьте уверены, что накладные расходы на переключение действий высоко оптимизированы в Android (например, экземпляр Dalvik всегда предварительно выделен, готов к обработке нового действия без накладных расходов на переключение контекста).
Ответ №2:
Краткий ответ: это действительно зависит от того, как вы хотите разместить свое приложение.
Например, если вы хотите иметь вкладки, вы можете использовать tabhost, который будет легко переключаться между действиями для вас.
Если вы хотите самостоятельно запускать действия, вы можете запускать действия с намерениями (как вы упомянули в своем вопросе). Примером является запуск намерений с помощью кнопки или ListView. Для ListView (с OnItemClickListener) у вас может быть что-то вроде:
(your ListView).setOnItemClickListener(new AdapterView.OnItemClickListener() {
public void onItemClick(AdapterView<?> av, View v, int index,
long arg3) {
Intent intent = new Intent(TheActivityYou'reLaunchingFrom.this, OtherActivityYouWishToLaunch.class);
startActivity(intent);
}
}
Предоставленные мной ссылки содержат действительно хорошие примеры. Когда вы хотите завершить действие, которое вы запустили из другого действия, вы можете вызвать функцию finish() , которая должна вызываться из другого события (например, нажатие на кнопку).
Также имейте в виду, что вы можете запускать действия с надеждой на получение данных от запущенного действия через startActivityForResult, который использует пакеты.
Комментарии:
1. Ха-ха, без проблем, чувак. Я знаю, что это не дает прямого ответа на ваш вопрос, но я подумал, что это может направить вас на правильный путь с точки зрения реализации.