Я новичок в андроиде, и я хочу понять, как лучше всего писать чистый код.
У меня есть следующий пример:Стандартный подход для передачи данных между цепочкой фрагментов
ActivityA ---> FragmentA (main UI window the user sees)
затем на действия пользователя
FragmentA --->starts---> ActivityB-->FragmentB (the next window the user sees and hides previous one)
затем на пользователя мыши:
FragmentB---> starts ---> ActivityC-->FragmentC (the next window the user see that hides the rest)
Таким образом, на последнем шаге пользователь видит расположение of FramentC.
FragmentC
Чтобы правильно заполнить виджеты макета, мне нужны некоторые данные, доступные в FragmentA
.
Что я теперь делаю:
Проведите данные как дополнительные услуги с намерением до FragmentB
. Некоторые из них на самом деле нужны FragmentB
, а другие нет, и их пересылают в FragmentB
, чтобы впоследствии они были переданы в FragmentC
через FragmentB
(опять же по намерению/дополнительно), если пользователь на самом деле нажимает кнопку, которая открывается FragmentC
.
Вопрос:
1) это работает, но мне было интересно, если то, что я прохожу в статистов о намерении FragmentB
данных, что это на самом деле не нужно, это неправильно/взломать и есть лучший/стандартное решение
2) При передаче данных между фрагментами эти копии данных или одна копия передается arround? Я не понимаю. Например. в моем примере, если у меня есть действительно большой объект, переданный от FragmentA
до FragmentB
(ему это не нужно), а затем FragmentB
передает его FragmentC
(ему нужно). В итоге я занял 3 размера?
(1) Таким образом, создать класс, который инкапсулирует Params и каждый фрагмент получает от этого класса, что ему нужно? (2) Итак, если я хочу, чтобы одна копия вместо этого уменьшала накладные расходы, это возможно? – Jim
(1) Да. Таким образом, Фрагмент B не должен знать о полях, используемых во Фрагменте C, хотя они прошли через него. (2) Не через намерения. Вы можете сделать это с помощью статики (однопользовательское поведение), но у вас будет возможность потери данных, если Android остановится и перезапустит вас - вам придется это учитывать. –