Android Проблема со студийной библиотекой навигации - PullRequest
0 голосов
/ 23 марта 2020

Я хочу использовать Навигацию в моем приложении.

объявлено в main_activity

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout 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/container"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        tools:context=".MainActivity">

    <!-- Main content -->
    <fragment
        android:id="@+id/nav_host_fragment"
        android:name="androidx.navigation.fragment.NavHostFragment"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        app:defaultNavHost="true"
        app:navGraph="@navigation/nav_graph" />
    </androidx.constraintlayout.widget.ConstraintLayout>

, затем я хочу go из Fragment1 в Fragment2, используя действие UPDATE Мне добавили еще код

class LoginFragment2 : Fragment(){
    private lateinit var viewModel : LoginViewModel2
    override fun onCreateView(
        inflater: LayoutInflater,
        container: ViewGroup?,
        savedInstanceState: Bundle?
    ): View? {
        return inflater.inflate(R.layout.fr_login, container, false)
    }

    override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
        super.onViewCreated(view, savedInstanceState)
        initViews()

    }

    private fun initViews() {





    btn_registration.setOnClickListener {
//            Navigation.findNavController(it).navigate(R.id.action_loginFragment2_to_newTypeAccountFragment)
//            navController = Navigation.findNavController(view)
//            findNavController(it).navigate(R.id.action_loginFragment2_to_newTypeAccountFragment)
            this.findNavController().navigate(R.id.action_loginFragment2_to_newTypeAccountFragment)
        }

    }

Я пробовал несколько вариантов (но ни один из них мне не помог)

E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.app.peshkariki, PID: 22658
    java.lang.IllegalStateException: View androidx.constraintlayout.widget.ConstraintLayout{ca39b84 
V.E...... ........ 0,0-720,1360} does not have a NavController set

как правильно с ним работать?

График навигации (На самом деле, он очень большой, но я опубликую небольшую часть, связанную с этим фрагментом)

 <?xml version="1.0" encoding="utf-8"?>
    <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/mainActivity">



        <fragment
            android:id="@+id/loginFragment2"
            android:name="com.app.peshkariki.newPesh.ui.login.LoginFragment2"
            android:label="LoginFragment2"
            tools:layout="@layout/fr_login">
            <action
                android:id="@+id/action_loginFragment2_to_newTypeAccountFragment"
                app:destination="@id/newTypeAccountFragment" />
        </fragment>
    </navigation>

1 Ответ

0 голосов
/ 23 марта 2020

Вы позвонили NavHostFragment, но вам не нужно.

Измените его на

btn_registration.setOnClickListener {            
    this.findNavController()
        .navigate(R.id.action_loginFragment2_to_newTypeAccountFragment)
}

Введите это onViewCreated:

val navHostFragment = supportFragmentManager.findFragmentById(R.id.my_nav_host_fragment) as NavHostFragment
val navController = navHostFragment.navController

Также вы можете захотеть сделать это курс

...