JetPack сочиняет внутри фрагмента: пройти фрагмент ARGS непосредственно к композиции или через ViewModel (SaveStateHandlAndroid

Форум для тех, кто программирует под Android
Ответить
Anonymous
 JetPack сочиняет внутри фрагмента: пройти фрагмент ARGS непосредственно к композиции или через ViewModel (SaveStateHandl

Сообщение Anonymous »

Я перемещаю приложение на основе фрагментов в JetPack, сочиняясь. Некоторые экраны по -прежнему являются фрагментами, которые проводит с помощью ComposeView. Недавно я изменил экран, чтобы пройти таб -типа через фрагментные аргументы вместо того, чтобы вытащить его из деятельности. < /P>

Код: Выделить всё

    class HomeTopFragment : Fragment() {

override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?,
): View {
val tabUid = requireArguments().getString("tabUid") // e.g., set via bundle
return ComposeView(requireContext()).apply {
setContent {
MyHomeTopScreen(tabUid = tabUid)
}
}
}
}

@Composable
fun MyHomeTopScreen(tabUid: String?) {
// UI renders based on tabUid; ViewModel is not aware of args
}
альтернативный подход (Args → ViewModel через SaveStateHandle):

Код: Выделить всё

@HiltViewModel
class HomeTopViewModel @Inject constructor(
private val savedStateHandle: SavedStateHandle
) : ViewModel() {
val tabUid: StateFlow = savedStateHandle
.getStateFlow("tabUid", null)
}

class HomeTopFragment : Fragment() {

// Hilt or default VM provider; key point is SavedStateHandle receives fragment args
private val vm: HomeTopViewModel by viewModels()

override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
// ensure arg exists for process death restoration
requireArguments().putString("tabUid", requireArguments().getString("tabUid"))
}

override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?,
): View =
ComposeView(requireContext()).apply {
setContent {
val tabUid by vm.tabUid.collectAsState()
MyHomeTopScreen(tabUid = tabUid)
}
}
}
Вопросы:
В композиции хостинга фрагмента, считается ли это наилучшей практикой для передачи фрагментов, непосредственно композируемым или поверхностному их ViewModel (например, через SavedStateHandle), и пусть композиционное состояние? Способ гарантировать, что SavedStateHandle получает фрагменты ARG, когда не использует навигационную композицию (то есть, простые фрагменты + composeview)? Какие-нибудь подводные камни для изменений смерти/конфигурации процесса? ценится.

Подробнее здесь: https://stackoverflow.com/questions/797 ... posable-or
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Android»