FindNavController (). Навигация из композиции в фрагменте приводит к исключениюAndroid

Форум для тех, кто программирует под Android
Ответить Пред. темаСлед. тема
Anonymous
 FindNavController (). Навигация из композиции в фрагменте приводит к исключению

Сообщение Anonymous »

У меня есть нормальный подкласс фрагмента, который раньше основывался на представлениях и использовании. Я мигрирую, чтобы сочинять медленно, поэтому я в основном удалял код, связанный с просмотром, и теперь использую OncreateView () , чтобы установить содержание фрагмента в композицию.
здесь это код: < /p>

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

class LoginFragment : BaseFragment() {
override val layoutRes: Int = R.layout.fragment_login
private val binding: FragmentLoginBinding by viewBinding()

private val viewModel: LoginViewModel by viewModel()

override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View {
return ComposeView(requireContext()).apply {
setViewCompositionStrategy(ViewCompositionStrategy.DisposeOnViewTreeLifecycleDestroyed)
setContent {
AppTheme {
LoginContentPortrait()
}
}
}
}

@OptIn(ExperimentalLayoutApi::class)
@Composable
private fun LoginContentPortrait(modifier: Modifier = Modifier) {
val uiState by viewModel.uiState.collectAsState()
val configuration = LocalConfiguration.current
val isInPortraitMode by remember {
derivedStateOf { configuration.orientation == Configuration.ORIENTATION_PORTRAIT }
}

viewModel.subscribeToEvents().collectWithLifecycle(viewLifecycleOwner) { event ->
when (event) {
is UIEvent.Navigation.Register -> {
findNavController().navigate(
LoginFragmentDirections.actionLoginFragmentToRegisterFragment()
)
}

(other similar cases)
}
}

...

Column(
Modifier
.fillMaxSize()
.padding(
start = 24.dp,
end = 24.dp,
bottom = 16.dp,
top = if (isInPortraitMode) 96.dp else 16.dp
)
.verticalScroll(rememberScrollState()),
horizontalAlignment = Alignment.CenterHorizontally,
verticalArrangement = Arrangement.spacedBy(8.dp)
) {
Row {
Column(
Modifier
.weight(0.5f)
.then(modifier),
horizontalAlignment = Alignment.CenterHorizontally,
) {
...(rest of the UI layout)...
SecondaryButton(
modifier = Modifier.fillMaxWidth(if (isInPortraitMode) 1f else 0.3f),
borderStroke = BorderStroke(1.dp, colorResource(CoreR.color.core_dark20)),
onClick = {
viewModel.navigateRegister()
}
) {
ButtonLabel(
text = stringResource(R.string.auth_createAccount),
textColor = colorResource(CoreR.color.core_black)
)
}
}
}
}
}
< /code>
Как вы можете видеть, после нажатия кнопки регистра, она вызывает ViewModel, которая затем издает соответствующее событие, которое затем поймано фрагментом. Теперь, как только findnavController ().  Vavigate (loginFragmentDirections.ActionLoginFragmentToreGisterFragment ()) 
запускается, приложение сбивается с нелегальным Смущает меня в том, что в моем файле NAV.xml все направления определены должным образом, поэтому они должны быть видны: < /p>

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




...


...


RegisterFragment также является подклассом BaseFragment , но не использует компонент на данный момент. Какие идеи мне не хватает? < /P>
Исключение: < /p>
java.lang.IllegalArgumentException: Navigation action/destination package:id/action_loginFragment_to_registerFragment cannot be found from the current destination Destination(package:id/registerFragment) label=RegisterFragment class=package.RegisterFragment
< /code>
p.s. Я проверил различные, казалось бы, похожие посты здесь о похожих проблемах, но ни один из них не работал для моего дела или, казалось, не охватывал этот точный случай, поэтому я публикую.

Подробнее здесь: https://stackoverflow.com/questions/794 ... -exception
Реклама
Ответить Пред. темаСлед. тема

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

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

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

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

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

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