Как добавить фрагмент в действие с помощью Jetpack Compose

#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 ). Есть два способа сделать это:

  1. Вы можете просто позвонить navController.navigate(R.id.yourFragmentId)
  2. Или вы можете определить действие между фрагментом входа и фрагментом сведений в nav_graph.xml (вы можете просто соединить их в представлении конструктора), а затем перейти с помощью navController.navigate(R.id.loginToDetailActionId)