Skip to content

Commit 1fadfdf

Browse files
committed
update
1 parent 3ecdddc commit 1fadfdf

File tree

19 files changed

+315
-328
lines changed

19 files changed

+315
-328
lines changed

app/src/main/AndroidManifest.xml

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212
android:usesCleartextTraffic="true"
1313
android:theme="@style/Theme.JetpackDemo">
1414
<activity
15-
android:name=".MainActivity"
15+
android:name=".page.MainActivity"
1616
android:exported="true"
1717
android:theme="@style/Theme.JetpackDemo">
1818
<intent-filter>
@@ -21,7 +21,6 @@
2121
<category android:name="android.intent.category.LAUNCHER" />
2222
</intent-filter>
2323
</activity>
24-
<activity android:name="com.wzq.jd.compose.app.page.WebActivity" />
2524
</application>
2625

2726
</manifest>

app/src/main/java/com/wzq/jd/compose/app/MainActivity.kt

Lines changed: 0 additions & 76 deletions
This file was deleted.
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
package com.wzq.jd.compose.app.page
2+
3+
import android.os.Bundle
4+
import androidx.activity.ComponentActivity
5+
import androidx.activity.compose.setContent
6+
import androidx.activity.enableEdgeToEdge
7+
import androidx.compose.foundation.layout.fillMaxSize
8+
import androidx.compose.material3.MaterialTheme
9+
import androidx.compose.material3.Surface
10+
import androidx.compose.ui.Modifier
11+
import androidx.navigation.compose.rememberNavController
12+
import com.wzq.jd.compose.app.ui.theme.JetpackDemoTheme
13+
14+
class MainActivity : ComponentActivity() {
15+
override fun onCreate(savedInstanceState: Bundle?) {
16+
enableEdgeToEdge()
17+
super.onCreate(savedInstanceState)
18+
setContent {
19+
JetpackDemoTheme {
20+
// A surface container using the 'background' color from the theme
21+
Surface(
22+
modifier = Modifier.fillMaxSize(), color = MaterialTheme.colorScheme.background
23+
) {
24+
MainNavGraph(navController = rememberNavController())
25+
}
26+
}
27+
}
28+
}
29+
}
Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
package com.wzq.jd.compose.app.page
2+
3+
import androidx.compose.animation.fadeIn
4+
import androidx.compose.animation.fadeOut
5+
import androidx.compose.animation.slideInHorizontally
6+
import androidx.compose.animation.slideOutHorizontally
7+
import androidx.compose.runtime.Composable
8+
import androidx.lifecycle.viewmodel.compose.viewModel
9+
import androidx.navigation.NavGraphBuilder
10+
import androidx.navigation.NavHostController
11+
import androidx.navigation.compose.NavHost
12+
import androidx.navigation.compose.composable
13+
import com.wzq.jd.compose.app.data.model.Categories
14+
import com.wzq.jd.compose.app.page.categories.CategoryScreen
15+
import com.wzq.jd.compose.app.page.home.HomeScreen
16+
import com.wzq.jd.compose.app.page.search.SearchScreen
17+
import com.wzq.jd.compose.app.page.web.WebScreen
18+
19+
/**
20+
* create by wzq on 2023/12/13
21+
*
22+
*/
23+
@Composable
24+
fun MainNavGraph(hostName: String = "main", navController: NavHostController) {
25+
val startPage = "home"
26+
NavHost(navController = navController,
27+
startDestination = startPage,
28+
route = hostName,
29+
enterTransition = { slideInHorizontally { it } },
30+
exitTransition = { fadeOut() },
31+
popEnterTransition = { fadeIn() },
32+
popExitTransition = { slideOutHorizontally { it } }) {
33+
34+
val navActions = NavActions(navController)
35+
homePage(navActions)
36+
webPage(navActions)
37+
searchPage(navActions)
38+
categoryPage(navActions)
39+
}
40+
}
41+
42+
private fun NavGraphBuilder.homePage(navActions: NavActions) = composable(ScreenPath.Home.route) {
43+
HomeScreen(viewModel(), navActions = navActions)
44+
}
45+
46+
private fun NavGraphBuilder.webPage(navActions: NavActions) = composable(ScreenPath.Web.route) {
47+
WebScreen(navActions, it.arguments?.getString("url"))
48+
}
49+
50+
private fun NavGraphBuilder.searchPage(navActions: NavActions) =
51+
composable(ScreenPath.Search.route) {
52+
SearchScreen(navActions)
53+
}
54+
55+
private fun NavGraphBuilder.categoryPage(navActions: NavActions) =
56+
composable(ScreenPath.Category.route, ScreenPath.Category.namedNavArguments) { backStackEntry ->
57+
val categories: Categories? = backStackEntry.arguments?.getParcelable("data")
58+
CategoryScreen(navActions = navActions, categories)
59+
}

app/src/main/java/com/wzq/jd/compose/app/page/PageRouter.kt

Lines changed: 0 additions & 35 deletions
This file was deleted.
Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,70 @@
1+
package com.wzq.jd.compose.app.page
2+
3+
import androidx.core.os.bundleOf
4+
import androidx.navigation.NamedNavArgument
5+
import androidx.navigation.NavController
6+
import androidx.navigation.NavType
7+
import androidx.navigation.navArgument
8+
import com.wzq.jd.compose.app.data.model.Categories
9+
10+
/**
11+
* create by wzq on 2023/11/27
12+
*
13+
*/
14+
sealed class ScreenPath(
15+
val route: String, val namedNavArguments: List<NamedNavArgument> = emptyList()
16+
) {
17+
18+
data object Home : ScreenPath("home")
19+
20+
data object Web : ScreenPath("web?url={url}") {
21+
fun getPath(url: String?) = "web?url=${url}"
22+
}
23+
24+
data object Search : ScreenPath("search")
25+
26+
data object Category :
27+
ScreenPath(
28+
"category?position={position}",
29+
listOf(
30+
navArgument("position") {
31+
type = NavType.IntType
32+
},
33+
),
34+
) {
35+
36+
fun getPath(position: Int) = "category?position=${position}"
37+
}
38+
}
39+
40+
interface CommonActions {
41+
fun goBack(): Boolean
42+
}
43+
44+
class NavActions(private val navController: NavController) : CommonActions {
45+
fun toWebScreen(url: String?) {
46+
navController.navigate(ScreenPath.Web.getPath(url))
47+
}
48+
49+
fun toSearch() {
50+
navController.navigate(ScreenPath.Search.route)
51+
}
52+
53+
fun toCategory(position: Int = 0, categories: Categories) {
54+
val path = ScreenPath.Category.getPath(position)
55+
navController.graph.findNode(path)?.id?.also { id ->
56+
navController.navigate(
57+
id,
58+
args = bundleOf("data" to categories, "position" to position)
59+
)
60+
}
61+
62+
}
63+
64+
override fun goBack() = navController.navigateUp()
65+
}
66+
67+
68+
69+
70+

app/src/main/java/com/wzq/jd/compose/app/page/WebActivity.kt

Lines changed: 0 additions & 39 deletions
This file was deleted.
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
package com.wzq.jd.compose.app.page.categories
2+
3+
import androidx.lifecycle.SavedStateHandle
4+
import androidx.lifecycle.ViewModel
5+
import com.wzq.jd.compose.app.data.model.Categories
6+
7+
/**
8+
* create by wzq on 2023/12/11
9+
*
10+
*/
11+
class CategoriesViewModel(private val savedStateHandle: SavedStateHandle) : ViewModel() {
12+
13+
val initPosition = savedStateHandle["position"] ?: 0
14+
val categories: Categories? = savedStateHandle["data"]
15+
16+
init {
17+
println("a----$categories")
18+
println("${initPosition}----asdasdasd")
19+
}
20+
21+
}

0 commit comments

Comments
 (0)