ACTION is unknown to this NavController, когда нажимают на кнопку back

Я осуществляю Navigation component в моем проекте в java. У меня есть 1 activity и несколько fragments. Мой первый fragment (login) делает некие утверждения fragment меню в информацию служащего и тебя redirecciona.

loginViewModel.statusAsignacion.observe(this, loginResult -> {
        Log.d(TAG, "result = " + loginResult);
        binding.textViewLoginError.setText(loginResult);
        if (loginResult.equals(ASIGNACION_EXITOSA)) {
            NavHostFragment.findNavController(this).navigate(R.id.action_loginFragment_to_menuFragment);  //esta es la linea 92
        }
    });

Оживление делается правильно и я вхожу без проблем в меню, но нажав на кнопку back, получаю ошибку navigation destination xxxxxx:id/action_loginFragment_to_menuFragment is unknown to this NavController

java.lang.IllegalArgumentException: navigation destination xxxxx:id/action_loginFragment_to_menuFragment is unknown to this NavController
    at androidx.navigation.NavController.navigate(NavController.java:803)
    at androidx.navigation.NavController.navigate(NavController.java:744)
    at androidx.navigation.NavController.navigate(NavController.java:730)
    at androidx.navigation.NavController.navigate(NavController.java:718)
    at com.wsircam.adn.mvvm.app.login.LoginFragment.lambda$onViewCreated$1(LoginFragment.java:92)

В моем grafo навигации, действии, если она определена.

<navigation xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/nav_graph"
app:startDestination="@id/loginFragment">
<fragment
    android:id="@+id/loginFragment"
    android:name="xxxx.app.login.LoginFragment"
    android:label="login_fragment"
    tools:layout="@layout/login_fragment">
    <action
        android:id="@+id/action_loginFragment_to_menuFragment"
        app:destination="@id/menuFragment"
        app:enterAnim="@anim/slide_in_right"
        app:exitAnim="@anim/slide_out_left"
        app:popEnterAnim="@anim/slide_in_left"
        app:popExitAnim="@anim/slide_out_right" />
</fragment>
<fragment
    android:id="@+id/menuFragment"
    android:name="xxxx.app.menu.MenuFragment"
    android:label="menu_fragment"
    tools:layout="@layout/menu_fragment" />

0
задан 21.03.2019, 00:03
2 ответа

То, за чем оно последует, состоит, в том, что использовав mutableLiveData, у переменной уже есть "состояние", которое в моем случае "ASIGNACION_EXITOSA". Изменив экран совсем хорошо, но возвратившись, "состояние" переменной продолжает подарок (ASIGNACION_EXITOSA), и событие observe в MutableLiveData включается, что вызывает, что хочется двигать снова следующий fragment, но как он даже не является первоначальным fragment, нажав back, мое приложение не удавалось. Другая сцена, которую я прочитал, состоит в том, что ты давал ему back, и он посылал тебя прямо в следующий экран, но происходи из-за того же самого.

Решение состояло в том, чтобы использовать SingleLiveEvent. Возможно читать темы здесь

SingleLiveEvent вкратце и как Ваше имя это говорит, это событие, которое только работает однажды, и которое событие выполняло бы, когда действительно происходит изменение в mutableLiveData. Это способствует, тому, чтобы возвратившись к предыдущему fragment, нажав back, событие не работало, и следовательно не пробует изменять фрагмент.

0
ответ дан 02.12.2019, 05:21

Я предлагаю тебе санкционировать, чтобы избегать переходить с одного сайта на другой, когда ты находишься в menuFragment, так как, если ты находишься в этом Fragment не podrГЎs переходить с одного сайта на другой и obtendrГЎs один IllegalArgumentException:

  if(NavHostFragment.findNavController(this).getCurrentDestination().getId() == NavHostFragment.findNavController(this).getGraph().getStartDestination()) {  
     NavHostFragment.findNavController(this).navigate(R.id.action_loginFragment_to_menuFragment);  

    }
0
ответ дан 02.12.2019, 05:21