Какой правильный выбор? Создать новую деятельность или просто создать другой макет и заменить существующий макет? - PullRequest
3 голосов
/ 06 января 2010

Поскольку я новичок в 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.wh независимо) , когда я хочу изменить «содержимое» выше

Привет

Ответы [ 3 ]

7 голосов
/ 06 января 2010

Вам, вероятно, следует использовать отдельный 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 голосов
/ 06 января 2010

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

0 голосов
/ 06 января 2010

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...