Я знаю о «newInstance» -Pattern (Best practice for instantiating a new Android Fragment). Но как я могу обновить эти аргументы фрагмента, например, если другой фрагмент изменяет данные?Лучшая практика для обновления аргументов фрагмента?
Я знаю о методах обратного вызова между Fragments/Activitys, но эти обратные вызовы не будут обновлять аргументы ?!
Например: при создании фрагмента я передаю ему URI с помощью пучка. Затем другой фрагмент изменяет этот URI посредством обратного вызова метода changeUri (Uri uri) для первого фрагмента. Если после этого фрагмент будет восстановлен (например, из-за поворота экрана), он будет использовать первый URI из набора аргументов вместо более позднего обновления uri, правильно?
Какова наилучшая практика для решения этой проблемы? Должен ли я вручную хранить его в файле savedInstanceState, а при использовании решить, использовать ли instanceState или arguments-bundle?
Я ищу стандартный способ обработки аргументов моих фрагментов, так что я думаю, что я буду с таким подходом (псевдо-код):
private Uri arg1;
public static Fragment newInstance(Uri arg1) {
create bundle
create fragment instance
set bundle to fragment
return fragment
}
private void onCreate(Bundle savedInstance) {
if(savedInstance != null) {
arg1 = savedInstance.uri
}
}
private Uri getUri() {
if(arg1 == null) {
arg1 = getArguments.uri
}
if(arg1 == null) {
arg1 = defaultValue
}
}
Так у меня есть просто единая способ доступа к моим аргументам. И не нужно использовать if-else-hassle, каждый раз, когда мне нужен этот аргумент.
Что вы думаете об этом?
Да. Сколько кодов говорит? Метод oveeriden -'onSaveInstanceState'- с 1 дополнительной строкой и оператором if-else в 'onCreate'? – gunar
Исходные фрагменты дефектов не должны зависеть от других фрагментов – danny117
Как насчет «переписать» аргументы в общедоступном методе этого фрагмента? –