Если макеты и поведение значительно не различаются между действиями в меню и действиями с контентом, я бы выбрал «подход с несколькими действиями».
Кнопка «Назад» не сломается, Android отслеживает ваше отставание.
Вам действительно нужно 89 разных макетов?Если это в основном содержимое, что отличается между ними, сохраняйте содержимое в базе данных или файле или в /res/
, повторно используйте макеты и заполняйте области содержимого макета во время выполнения.
Обновления:
Разве не проще всего иметь 1 действие на страницу контента, которое в onCreate () заполняет макет соответствующим контентом?
Зависит от того, насколько разным будет ваш код onCreate()
.Если ваш onCreate()
будет гигантским switch
с 62 совершенно разными предложениями case
, то, вероятно, лучше пойти с отдельными небольшими действиями, а не с огромными.Если вы можете обобщить код onCreate()
и оставить его ниже, скажем, 100 строк и 10 операторов ветвления, это было бы неплохо.
Чтобы привести пример, некоторое время назад я строилпростое приложение, которое имеет коллекцию вопросов экзамена, и представляет их случайным образом пользователю.Каждый вопрос имеет текст вопроса, иллюстрацию и 2-4 варианта ответов.Было около 500 разных вопросов.Вот код, который загружает вопрос из базы данных и обновляет макет.Обратите внимание, что он обрабатывает переменное количество ответов и возможность некоторых вопросов, не имеющих иллюстрации.
public void loadQuestion(int id) {
// Columns in questions table:
// CREATE TABLE questions (
// id integer,
// q text,
// a1 text,
// a2 text,
// a3 text,
// a4 text,
// a5 text,
// correct integer,
// img blob
// );
Cursor c = mDatabase.rawQuery("SELECT * FROM questions where id=" + id, null);
c.moveToFirst();
TextView text = (TextView) findViewById(R.id.text);
text.setText(c.getString(1));
RadioGroup g = (RadioGroup) findViewById(R.id.answers);
g.clearCheck();
// Load answers!
int correct = c.getInt(7);
int[] buttons = new int[] {R.id.a1, R.id.a2, R.id.a3, R.id.a4, R.id.a5};
for (int i=0; i < 5; i++) {
String answerText = c.getString(i + 2);
RadioButton rb = (RadioButton) findViewById(buttons[i]);
if (answerText != null && answerText.length() > 0) {
rb.setText(answerText);
rb.setTag(i + 1 == correct ? "correct" : null);
rb.setVisibility(RadioButton.VISIBLE);
} else {
rb.setVisibility(RadioButton.GONE);
}
}
byte[] encoded = c.getBlob(8);
ImageView iv = (ImageView) findViewById(R.id.image);
if (encoded != null && encoded.length > 0) {
iv.setVisibility(ImageView.VISIBLE);
iv.setImageBitmap(bytesToBitmap(encoded));
} else {
iv.setVisibility(ImageView.GONE);
}
}
Что вы подразумеваете под: кнопка «Назад» не сломается, Android отслеживает ваше отставание?
Когда пользователь уходит из активностиВ приложениях система Android ведет линейную навигационную историю действий, которые посетил пользователь.Это стек действий, также известный как задний стек.Обычно, когда пользователь запускает новое действие, оно добавляется в стек действий, поэтому нажатие НАЗАД отображает предыдущее действие в стеке.
(из Рекомендации по проектированию действий и задач)