Skip to content
This repository was archived by the owner on Jul 18, 2026. It is now read-only.

Commit 6dd46c0

Browse files
committed
改善从下载页点击艺术家头像出现Fatal Exception: java.lang.IllegalStateException, xxxx does not have a NavController set崩溃的问题
1 parent 04b9939 commit 6dd46c0

2 files changed

Lines changed: 39 additions & 15 deletions

File tree

app/src/main/java/com/yenaly/han1meviewer/ui/activity/MainActivity.kt

Lines changed: 26 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -203,33 +203,48 @@ class MainActivity : YenalyActivity<ActivityMainBinding>(), DrawerListener, Tool
203203

204204
private fun handleDeeplinkIfNeeded(intent: Intent) {
205205
Log.i("deeplink", "intent=$intent")
206+
207+
//外部跳转Deeplink
206208
if (intent.action == Intent.ACTION_VIEW) {
207209
val uri = intent.data ?: return
208210
val videoCode = uri.getQueryParameter("v") ?: return
209211
showVideoDetailFragment(videoCode)
210212
return
211213
}
212214

213-
val tag = intent.getStringExtra("startSearchFromTag")
214-
if (tag != null) {
215+
val navHostFragment = supportFragmentManager.findFragmentById(R.id.fcv_main) as? NavHostFragment ?: return
216+
val navController = navHostFragment.navController
217+
if (navHostFragment.childFragmentManager.isStateSaved) {
218+
Log.w("deeplink", "❌ Cannot navigate: state already saved")
219+
return
220+
}
221+
222+
//String形式TAG
223+
intent.getStringExtra("startSearchFromTag")?.let { tag ->
215224
intent.removeExtra("startSearchFromTag")
216-
val navHostFragment = supportFragmentManager.findFragmentById(R.id.fcv_main) as? NavHostFragment
217-
val navController = navHostFragment?.navController
218-
if (navHostFragment?.childFragmentManager?.isStateSaved == true) {
219-
return
220-
}
221-
if (navController?.currentDestination?.id != R.id.searchFragment) {
222-
navController?.navigate(
225+
if (navController.currentDestination?.id != R.id.searchFragment) {
226+
navController.navigate(
223227
R.id.searchFragment,
224228
bundleOf(ADVANCED_SEARCH_MAP to tag)
225229
)
226-
} else {
227-
Log.i("deeplink", "🔁 Already at searchFragment")
228230
}
231+
return
232+
}
233+
234+
// Map形式TAG
235+
@Suppress("UNCHECKED_CAST","DEPRECATION")
236+
val map = intent.getSerializableExtra("startSearchFromMap") as? HashMap<String, String>
237+
if (map != null) {
238+
intent.removeExtra("startSearchFromMap")
239+
navController.navigate(
240+
R.id.searchFragment,
241+
bundleOf(ADVANCED_SEARCH_MAP to map)
242+
)
229243
}
230244
}
231245

232246

247+
233248
private fun removeAuthGuard() {
234249
val root = findViewById<ViewGroup>(R.id.dl_main) // 或者 R.id.root
235250
val authGuard = findViewById<View>(R.id.auth_guard)

app/src/main/java/com/yenaly/han1meviewer/ui/fragment/video/VideoIntroductionFragment.kt

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,7 @@ import com.yenaly.han1meviewer.logic.model.HanimeInfo
5858
import com.yenaly.han1meviewer.logic.model.HanimeVideo
5959
import com.yenaly.han1meviewer.logic.state.VideoLoadingState
6060
import com.yenaly.han1meviewer.logic.state.WebsiteState
61+
import com.yenaly.han1meviewer.ui.activity.MainActivity
6162
import com.yenaly.han1meviewer.ui.adapter.AdapterLikeDataBindingPage
6263
import com.yenaly.han1meviewer.ui.adapter.BaseSingleDifferAdapter
6364
import com.yenaly.han1meviewer.ui.adapter.HanimeVideoRvAdapter
@@ -618,10 +619,18 @@ class VideoIntroductionFragment : YenalyFragment<FragmentVideoIntroductionBindin
618619
val bundleMap = HashMap<String, Serializable>().apply {
619620
map.forEach { (k, v) -> put(k.name, v) }
620621
}
621-
findNavController().navigate(
622-
R.id.searchFragment,
623-
bundleOf(ADVANCED_SEARCH_MAP to bundleMap),
624-
)
622+
try{
623+
findNavController().navigate(
624+
R.id.searchFragment,
625+
bundleOf(ADVANCED_SEARCH_MAP to bundleMap),
626+
)
627+
}catch (e:IllegalStateException){
628+
context.startActivity(
629+
Intent(context, MainActivity::class.java).apply {
630+
putExtra("startSearchFromMap", HashMap(bundleMap)) // 必须是 Serializable
631+
}
632+
)
633+
}
625634
}
626635
tvArtist.text = artist.name
627636
tvGenre.text = artist.genre

0 commit comments

Comments
 (0)