В Android должен каждый экран быть собственным Управлением или макетом?

Хорошо, я разрабатываю приложение, которое имеет очень простой макет из 62 экранов контента, доступ к которым осуществляется через 27 экранов меню. Всего это 89 мероприятий.

На данный момент у меня есть каждый экран содержимого, который будет представлять собой Activity, который просто вызывает XML-макет (некоторый текст, кнопки и изображение) и добавляет некоторые функции onClick.

Каждый экран меню является ListActivity, и нажатие каждого элемента в списке открывает активность этого элемента (будь то другой экран меню или экран содержимого).

На данный момент я тестирую его с помощью 3 экранов меню и экрана содержимого. Это нормально, прокручивая их все, однако я обеспокоен тем, что, когда я закончу приложение, у него будет слишком много действий и сделайте приложение медленным и slugish. В среднем использовании приложения я предполагаю, что пользователь будет использовать не более 10 видов деятельности, но я не уверен, что Android будет ожидать создания других неиспользуемых действий или чего-то еще.

Таким образом, другой способ реализовать это будет иметь всего несколько действий (возможно, 1 для MainMenu, 1 для subMenu и 1 для ContentScreen), которые просто определяют, какой макет отображать. Однако я чувствую, что это будет означать, что у каждой активности есть еще много работы, а также я теряю функциональность нажатия кнопки «Назад», заставляя пользователя выполнять резервное копирование по иерархии меню (и кодирование кнопки «Назад» на каждом экране Вовлекайте массивный Случай для onClick, включающий каждый возможный макет, все 89 из них!).

Каким будет лучший способ сделать это приложение?

Любая помощь очень ценится

Если макеты и поведение существенно не отличаются между действиями меню и действиями контента, я бы включил «всего несколько действий».

Кнопка «Назад» не будет ломаться, Android отслеживает ваше отставание.

Вам действительно нужны 89 различных макетов? Если в основном контент отличается тем, что отличается от них, храните контент в базе данных или файле или в /res/ , повторно используйте макеты и заполняйте области содержимого макета во время выполнения.


Обновления:

Разве не было бы проще иметь 1 активность на странице контента, которая в onCreate () заполняет макет соответствующим содержимым?

Зависит от того, насколько отличается ваш onCreate() . Если ваш onCreate() станет гигантским switch с 62 совершенно разными предложениями, то, вероятно, лучше пойти с отдельными небольшими действиями, а не с огромным. Если вы можете обобщить код 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 сохраняет линейную навигационную историю действий, которые посетил пользователь. Это стек активности, также известный как задний стек. В общем случае, когда пользователь запускает новое действие, он добавляется в стек активности, так что нажатие BACK отображает предыдущую активность в стеке.

(Из Руководства по разработке работ и задач )

Я не думаю, что это станет медленным только из-за количества заявленных действий. Однако вы должны, вероятно, повторно использовать некоторые из своих макетов по всем видам деятельности: http://developer.android.com/resources/articles/layout-tricks-merge.html

Вы можете повторно использовать свой макет и можете использовать методы startAcitity и startActivityForResult для управления эффективностью действий.