#android #android-jetpack #android-jetpack-compose
Вопрос:
Как добавить a Fragment
в Activity
использование jetpack compose
, я не смог найти подходящую документацию , Вот мой код действия выглядит так
class MainActivity : ComponentActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContent {
ComposeDemoTheme {
// A surface container using the 'background' color from the theme
Surface(color = MaterialTheme.colors.background) {
RenderTextUserFields()
}
}
}
}
}
И у меня есть имя фрагмента LoginFragment
, которое я хочу отобразить LoginFragment
при первоначальной загрузке приложения, затем я хочу перейти к другому фрагменту, который у меня есть DetailsFragment
Комментарии:
1. Если вы используете фрагменты, то вам понадобится хост на основе представления, и во Фрагменте будет размещаться Составное. Пытаться использовать фрагмент с
ComponentActivity.setContent {
не имеет смысла.
Ответ №1:
Вы можете использовать стандартный AppCompatActivity
:
Например, в a Scaffold
вы можете использовать что-то вроде:
findNavController().navigate(R.id.nav_profile, bundle)
scope.launch {
scaffoldState.drawerState.close()
}
с:
private fun findNavController(): NavController {
val navHostFragment =
supportFragmentManager.findFragmentById(R.id.nav_host_fragment) as NavHostFragment
return navHostFragment.navController
}
Комментарии:
1. Спасибо за ответ , но я хотел сочинить способ добавления фрагмента, как в другом представлении
2. @AbhijitChakra способ сочинения . Ну, реальный ответ должен быть «почему вы пытаетесь использовать фрагмент в Compose».
3. вы правы, это не обязательно, но я хочу сделать это для специального сенарио, возможно ли это
Ответ №2:
Во-первых, я бы рекомендовал, если вы используете фрагменты с JetpackCompose, избегать использования действий. Итак, если я правильно понял, что вы могли бы сделать, это определить свой график навигации, что вы можете сделать, добавив папку навигации в папку res, и там создать nav_graph.xml
(см.: Навигация Android). Установите свой начальный фрагмент(в данном случае логин-фрагмент) в качестве начального фрагмента(это можно сделать при проектировании nav_graph.xml после того, как вы добавите в него свои фрагменты). После этого вы можете объявить свой навигационный контроллер во фрагменте, например val navController = findNavController()
, с помощью которого вы можете передать его в свой составляемый, и по щелчку мыши или что-то еще, что у вас есть, вы перейдете к нужному фрагменту(который должен быть определен в nav_graph.xml
). Есть два способа сделать это:
- Вы можете просто позвонить
navController.navigate(R.id.yourFragmentId)
- Или вы можете определить действие между фрагментом входа и фрагментом сведений в
nav_graph.xml
(вы можете просто соединить их в представлении конструктора), а затем перейти с помощьюnavController.navigate(R.id.loginToDetailActionId)