Передача фрагментов между действиями - PullRequest
7 голосов
/ 12 июля 2011

Я хочу сделать приложение, которое может поддерживать книжную и альбомную ориентацию. Макет имеет две панели, слева находятся параметры, а справа показан результат. Когда опция выбрана, правая панель показывает это. Но для портрета недостаточно места, поэтому необходимо отдельное занятие. Каждый параметр создает фрагмент другого типа, поэтому я не хочу выполнять действие для каждого параметра, когда все, что изменяется между действиями, это то, какой фрагмент добавляется туда. Я хочу передать фрагмент из основной деятельности в новую, как бы я это сделал?

Ответы [ 2 ]

6 голосов
/ 12 июля 2011

РЕДАКТИРОВАТЬ: Переместил то, что на самом деле хочет просящий.

Если вы хотите передать данные в Activity при создании, вызовите версию Intent .putExtra() с намерением, чтоиспользуется в startActivity().Затем вы можете использовать getIntent().getStringExtra(), чтобы (например) получить дополнительную строку в упражнении.

Скажем, у вас есть фрагмент строковых данных в вашем первом упражнении под названием myString.

Intent intent = new Intent(this, SecondActivity.class);
intent.putExtra(EXTRA_NAME_CONSTANT, myString);
startActivity(intent);

Теперь в вашем новом действии в onCreate вы бы сделали:

String myString = this.getIntent()
        .getStringExtra(EXTRA_NAME_CONSTANT, "default return value here");

Несколько замечаний:

  • Для этого EXTRA_NAME_CONSTANT я хочу создать строкуконстанта в форме "your.package.name.SomeString", например "com.example.MyString".Лично я бы даже использовал ресурс (доступный в форме getString(R.string.extra_my_string)) для имени экстра.Они рекомендуют префиксировать его именем вашего пакета.
  • Вы можете помещать и получать много типов данных из строк в массивы даже в сериализуемые данные.

Вместо созданияОтдельное действие для разных ориентаций макетов: рассмотрите использование квалификаторов ресурсов для предоставления альтернативных макетов .

Подводя итог, сделайте два макета в структуре, например:

/res/layout/yourlayout.xml
/res/layout-land/yourlayout.xml

Где обаФайлы XML названы одинаково.Затем создайте макет портрета по умолчанию в одном и альбомную версию в другом.

Когда вы надуваете макет в onCreate (и когда это происходит автоматически при изменении макета во время выполнения), он выберет правильныймакет для вас.

5 голосов
/ 12 июля 2011

Я хочу передать фрагмент из основной деятельности в новую, как бы я это сделал?

Ты бы не стал. Самое большее, вы следовали бы ответу @ Ribose - передайте флаг в упражнение через дополнительное, чтобы указать, какой набор фрагментов создать.

...