diff --git a/app/src/main/java/io/legado/app/ui/book/search/SearchViewModel.kt b/app/src/main/java/io/legado/app/ui/book/search/SearchViewModel.kt index 9dc6fea46..71024211f 100644 --- a/app/src/main/java/io/legado/app/ui/book/search/SearchViewModel.kt +++ b/app/src/main/java/io/legado/app/ui/book/search/SearchViewModel.kt @@ -317,8 +317,13 @@ class SearchViewModel( } syncScopeState() - // Always reset search state so the screen starts clean, - // regardless of whether the ViewModel was retained by navigation. + // When the ViewModel already holds a non-empty committed query, + // it means a search session is in progress or completed. + // This happens when returning from BookInfo — the LaunchedEffect + // re-fires but we must not wipe the existing results. + val hasActiveSearch = _uiState.value.committedQuery.isNotEmpty() + if (hasActiveSearch) return + clearSearchResults() val initKey = key?.trim().orEmpty() diff --git a/app/src/main/java/io/legado/app/ui/main/MainNavigator.kt b/app/src/main/java/io/legado/app/ui/main/MainNavigator.kt index 6934f7b46..b73997706 100644 --- a/app/src/main/java/io/legado/app/ui/main/MainNavigator.kt +++ b/app/src/main/java/io/legado/app/ui/main/MainNavigator.kt @@ -48,7 +48,10 @@ object MainNavigator { is MainRouteCache, MainRouteBookCacheManage, is MainRouteReadBook -> { - if (currentRoute == MainRouteHome) { + if ( + currentRoute == MainRouteHome || + currentRoute is MainRouteBookInfo + ) { backStack.add(route) } else { backStack.clear()