I am trying to navigate to Fragment abc from Fragment abd only if there is internet connection. I am using connectivity manager to check internet connection. Hereby attaching the code.
fun checkInternetConnection(isNetworkAvailable: (Boolean) -> Unit) {
val capabilities =
connectivityManager.getNetworkCapabilities(connectivityManager.activeNetwork)
if (capabilities != null) {
when {
capabilities.hasTransport(NetworkCapabilities.TRANSPORT_CELLULAR) -> {
isNetworkAvailable(true)
}
capabilities.hasTransport(NetworkCapabilities.TRANSPORT_WIFI) -> {
isNetworkAvailable(true)
}
capabilities.hasTransport(NetworkCapabilities.TRANSPORT_ETHERNET) -> {
isNetworkAvailable(true)
}
}
} else {
isNetworkAvailable(false)
}
connectivityManager.registerDefaultNetworkCallback(object :
ConnectivityManager.NetworkCallback() {
override fun onLost(network: Network) {
super.onLost(network)
isNetworkAvailable(false)
}
override fun onAvailable(network: Network) {
super.onAvailable(network)
isNetworkAvailable(true)
}
})
}
//calling checkInternetConnection function
checkInternetConnection({
if (it) {
activity?.runOnUiThread {
findNavController().navigate(R.id.action_abdFragment_to_abcFragment)
}
} else {
activity?.runOnUiThread {
Snackbar.make(
binding.root,
Constants.NO_INTERNET_MESSAGE,
Snackbar.LENGTH_SHORT
).show()
}
}
})
It is showing error like this :
java.lang.IllegalArgumentException: Navigation action/destination abc.abcd:id/action_abdFragment_to_abcFragment cannot be found from the current destination Destination(abc.abcd:id/abcFragment) label=fragment_abc_fragmentclass=abc.abcd.ui.abcFragment
//navigation
<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/main_nav"
app:startDestination="@id/abcFragment">
<fragment
android:id="@+id/abdFragment"
android:name="abc.abcd.ui.abd.adbFragment"
android:label="fragment_abd"
tools:layout="@layout/fragment_abd" >
<action
android:id="@+id/action_abdFragment_to_abcFragment"
app:destination="@id/abcFragment" />
</fragment>
<fragment
android:id="@+id/abcFragment"
android:name="abc.abcd.ui.abc.abcFragment"
android:label="fragment_abc"
tools:layout="@layout/fragment_abc" /></navigation>
seems like an issue with threading. Can someone help me to solve this?