Skocz do zawartości
Majks

Jak zniszczyć poprzedni fragment? [Kotlin]

    Rekomendowane odpowiedzi

    Majks

    Cześć, przychodzę do was z problem nad którym siedzę już dłuższą chwilei chyba spróbowałem wszystkiego. Mam 2 fragmenty login i register. Z jedego mozna przejśc do drugiego i vice versa. Problem w tym, że jak sobie tak poprzechodzimy to się one stackują. W jaki sposób mogę zniszczyć ostatni fragment?

    Udostępnij tę odpowiedź


    Odnośnik do odpowiedzi
    Udostępnij na innych stronach

    Używasz FragmentManagera do zarządzania tymi fragmentami? 

    Udostępnij tę odpowiedź


    Odnośnik do odpowiedzi
    Udostępnij na innych stronach
    Majks
    Napisano (edytowane)

    @Coders Lab Nie. Ogólnie w taki sposób przechodzi się pomiędzy fragmentami:

    private fun navigateToLogin() {
        when (findNavController().currentDestination!!.id) {
            R.id.registrationFragment -> findNavController().navigate(R.id.action_registrationFragment_to_loginFragment)
        }
    }

    Tak wygląda plik xml (navigation)

    <fragment
        android:id="@+id/registrationFragment"
        android:name="##########"
        android:label="Registration Fragment"
        tools:layout="@layout/fragment_registration" >
        <action
            android:id="@+id/action_registrationFragment_to_loginFragment"
            app:destination="@id/loginFragment"/>
    </fragment>

    Nie jest to mój projekt i ogólnie nie ogarniam jeszcze za bardzo takich bibliotek jak RxJava czy RxAndroid .

    Ogólnie plan w teorii jest taki aby sprawdzić czy fragment do którego chcemy przejśc jest w backStacku. Jeśli tak -> po prostu przejśc do niego, jeśli nie -> stworzyć go i przejśc. Tylko nie wiem jak się do tego zabrać

    Edytowane przez Majks

    Udostępnij tę odpowiedź


    Odnośnik do odpowiedzi
    Udostępnij na innych stronach

    @Majks Pierwsza rzecz - nie używaj <fragment> w xmlu kiedy będziesz chciał podmieniać fragmenty. Posłuży Ci do tego <FrameLayout>:
     

            <FrameLayout
                android:id="@+id/fragment_container"
                android:layout_width="match_parent"
                android:layout_height="match_parent"/>

    Następnie w activity będziesz miał obiekt registrationFragmentloginFragment
     

    lateinit var loginFragment: LoginFragment
    lateinit var registrationFragment: RegistrationFragment
    
    private fun navigateToLogin() {
      //jeżeli nie został jeszcze zainicjalizowany
      if(!::loginFragment.isInitialized){ 
        loginFragment = LoginFragment()     
      }
      //ustawienie odpowiedniego fragmentu
       getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container, loginFragment).commit();
    }
    
    private fun navigateToRegistration() {
      //jeżeli nie został jeszcze zainicjalizowany
      if(!::registrationFragment.isInitialized){ 
        loginFragment = RegistrationFragment()     
      }
      //ustawienie odpowiedniego fragmentu
       getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container, registrationFragment).commit();
    }

    Wtedy na stacku będzie tylko jeden fragment. 

    • Piwko! 1

    Udostępnij tę odpowiedź


    Odnośnik do odpowiedzi
    Udostępnij na innych stronach

    Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto

    Jedynie zarejestrowani użytkownicy mogą komentować zawartość tej strony.

    Zarejestruj nowe konto

    Załóż nowe konto. To bardzo proste!

    Zarejestruj się

    Zaloguj się

    Posiadasz już konto? Zaloguj się poniżej.

    Zaloguj się

    • Ostatnio przeglądający   0 użytkowników

      Brak zarejestrowanych użytkowników przeglądających tę stronę.

    x