Лучше создать новые действия или просто создать другой макет и заменить существующий макет?

Поскольку я новичок в Android, теперь я думаю о том, как правильно делать вещи.

На самом деле приложение, которое я пишу, имеет 4 разных экрана:

  • Экран 1 - список узлов (основной экран)
  • Экран 2 - меню настроек, раскладка таблицы с помощью кнопок
  • Экран 3 - навигация
  • Экран 4 - текстовая информация о версии и т.д.

Эти экраны можно перемещать в/из окна "Заголовок", расположенного сверху. Заголовок имеет 4 разные кнопки:

+--------------------+
| menu with buttons  |
+--------------------+
|                    |
|                    |
|                    |
|  C O N T E N T     |
|                    |
|                    |
|                    |
+--------------------+

main.xml - это на самом деле просто LinearLayout, который ВКЛЮЧАЕТ header.xml, а затем содержимое, в этом случае список узлов в ListView

options.xml это почти то же самое, он включает headerxml и несколько кнопок...

... и так далее с двумя другими экранами.

Поэтому, когда я нажимаю одну из кнопок в верхнем колонтитуле/меню, содержимое должно переключаться на этот экран. Мой вопрос:

  • Должен ли я создать одну активность для каждого экрана? Я прочитал в Google, что:
    Действие представляет собой визуальный интерфейс пользователя для одного сфокусированного усилия, которое может предпринять пользователь. Таким образом, это может быть истолковано, что я должен использовать одно действие для каждого из этих экранов.

  • Должен ли я не создавать больше операций, чем при запуске, а затем просто запустить setContentView (R.layout.whither), когда я хочу изменить "содержимое" выше?

Ответ 1

Вероятно, вы должны использовать отдельный Activity для каждого экрана; в противном случае вам нужно в конечном итоге отслеживать, какой индивидуум View в настоящее время отображается, плюс состояние всех тех, которые в настоящее время не отображаются, когда пользователь переключается в другое окно или приходит вызов и т.д.

Легче отслеживать это состояние, если вы просто используете отдельный Activity для каждой части функциональности.

Если вы решите сохранить все в одном Activity, вы можете посмотреть класс TabActivity. Тем не менее, есть также предостережения, которые препятствуют вам иметь Activity в качестве содержимого вкладки.


Что касается вашего последующего действия, вы, к сожалению, не можете привязать Intent к Button, как вы можете, с помощью MenuItem через XML, однако вы можете просто расширить Activity, чтобы создать свой собственный общий базовый класс с некоторым кодом, который подключает слушателей.

Что-то вроде:

public class BaseActivity extends Activity {
    protected View.OnClickListener mButtonListener;

    protected void setupHeaderButtons() {
        findViewById(R.id.header_btn_1).setOnClickListener(mButtonListener);
        // ...
        findViewById(R.id.header_btn_n).setOnClickListener(mButtonListener);
    }
}

public class FirstActivity extends BaseActivity {
    @Override
    public void onCreate(Bundle b) {
        super.onCreate(b);
        setContentView(R.layout.first_activity);

        // This needs to be done *after* the View has been inflated
        setupHeaderButtons();
    }
}

Ответ 2

Я также совершенно новичок в Android, но мой совет будет заключаться в создании 4 разных видов деятельности. Причиной этого является то, что для меня это кажется "более чистой" реализацией. Конечно, есть больше кода, который нужно написать, но я предпочел бы иметь более маленькие классы, чем один большой класс с большим количеством кода.

Ответ 3

Не уверен, что это было упомянуто в любом из вопросов, но если вы измените действия до 2.0, вы не сможете их оживить.

Итак, если у вас есть экран загрузки и вы хотите, чтобы он исчезал в меню, вы должны использовать два вида и переключаться между ними.