diff --git a/android/app/src/main/AndroidManifest.xml b/android/app/src/main/AndroidManifest.xml
index e189252..90c4980 100644
--- a/android/app/src/main/AndroidManifest.xml
+++ b/android/app/src/main/AndroidManifest.xml
@@ -3,24 +3,25 @@
-
-
-
-
-
-
+ android:roundIcon="@mipmap/ic_launcher_round"
+ android:supportsRtl="true"
+ android:theme="@style/AppTheme">
+
+
+
+
+
+
+
diff --git a/android/app/src/main/java/com/trust/ywx/AppManager.kt b/android/app/src/main/java/com/trust/ywx/AppManager.kt
new file mode 100644
index 0000000..e954660
--- /dev/null
+++ b/android/app/src/main/java/com/trust/ywx/AppManager.kt
@@ -0,0 +1,31 @@
+package com.trust.ywx
+
+import android.app.Activity
+import java.util.Stack
+
+object AppManager {
+ private val activityStack: Stack = Stack()
+ fun addActivity(activity: Activity) {
+ activityStack.add(activity)
+ }
+
+ fun removeActivity(activity: Activity) {
+ activityStack.remove(activity)
+ }
+
+ fun finishActivity(activity: Activity?) {
+ if (activity != null) {
+ removeActivity(activity)
+ activity.finish()
+ } else {
+ lastActivity()?.apply {
+ removeActivity(this)
+ this.finish()
+ }
+ }
+ }
+
+ fun lastActivity(): Activity? {
+ return activityStack.lastElement()
+ }
+}
\ No newline at end of file
diff --git a/android/app/src/main/java/com/trust/ywx/BuzActivity.kt b/android/app/src/main/java/com/trust/ywx/BuzActivity.kt
new file mode 100644
index 0000000..09fc5a8
--- /dev/null
+++ b/android/app/src/main/java/com/trust/ywx/BuzActivity.kt
@@ -0,0 +1,34 @@
+package com.trust.ywx
+
+import android.os.Bundle
+import com.facebook.react.ReactActivity
+import com.trust.ywx.specs.navigation.NavigationHelper
+import com.facebook.react.ReactActivityDelegate
+import com.facebook.react.defaults.DefaultNewArchitectureEntryPoint.fabricEnabled
+import com.facebook.react.defaults.DefaultReactActivityDelegate
+
+class BuzActivity : ReactActivity() {
+
+ /**
+ * Returns the name of the main component registered from JavaScript. This is used to schedule
+ * rendering of the component.
+ */
+ override fun getMainComponentName(): String = NavigationHelper.routerName
+
+ /**
+ * Returns the instance of the [ReactActivityDelegate]. We use [DefaultReactActivityDelegate]
+ * which allows you to enable New Architecture with a single boolean flags [fabricEnabled]
+ */
+ override fun createReactActivityDelegate(): ReactActivityDelegate =
+ DefaultReactActivityDelegate(this, mainComponentName, fabricEnabled)
+
+ override fun onCreate(savedInstanceState: Bundle?) {
+ super.onCreate(savedInstanceState)
+ AppManager.addActivity(this)
+ }
+
+ override fun onDestroy() {
+ AppManager.removeActivity(this)
+ super.onDestroy()
+ }
+}
diff --git a/android/app/src/main/java/com/trust/ywx/MainActivity.kt b/android/app/src/main/java/com/trust/ywx/MainActivity.kt
index 9d6792b..d9ecd78 100644
--- a/android/app/src/main/java/com/trust/ywx/MainActivity.kt
+++ b/android/app/src/main/java/com/trust/ywx/MainActivity.kt
@@ -1,22 +1,14 @@
package com.trust.ywx
-import com.facebook.react.ReactActivity
-import com.facebook.react.ReactActivityDelegate
-import com.facebook.react.defaults.DefaultNewArchitectureEntryPoint.fabricEnabled
-import com.facebook.react.defaults.DefaultReactActivityDelegate
+import android.content.Intent
+import android.os.Bundle
+import androidx.appcompat.app.AppCompatActivity
+import com.trust.ywx.specs.navigation.NavigationHelper
-class MainActivity : ReactActivity() {
-
- /**
- * Returns the name of the main component registered from JavaScript. This is used to schedule
- * rendering of the component.
- */
- override fun getMainComponentName(): String = "app"
-
- /**
- * Returns the instance of the [ReactActivityDelegate]. We use [DefaultReactActivityDelegate]
- * which allows you to enable New Architecture with a single boolean flags [fabricEnabled]
- */
- override fun createReactActivityDelegate(): ReactActivityDelegate =
- DefaultReactActivityDelegate(this, mainComponentName, fabricEnabled)
+class MainActivity : AppCompatActivity() {
+ override fun onCreate(savedInstanceState: Bundle?) {
+ super.onCreate(savedInstanceState)
+ NavigationHelper.routerName = "app"
+ startActivity(Intent(this, BuzActivity::class.java))
+ }
}
diff --git a/android/app/src/main/java/com/trust/ywx/specs/NavigationManager.kt b/android/app/src/main/java/com/trust/ywx/specs/NavigationManager.kt
new file mode 100644
index 0000000..e9c017b
--- /dev/null
+++ b/android/app/src/main/java/com/trust/ywx/specs/NavigationManager.kt
@@ -0,0 +1,23 @@
+package com.trust.ywx.specs
+
+
+import android.content.Intent
+import com.facebook.react.bridge.ReactApplicationContext
+import com.trust.ywx.AppManager
+import com.trust.ywx.BuzActivity
+import com.trust.ywx.specs.NativeNavigationManagerSpec
+import com.trust.ywx.specs.navigation.NavigationHelper
+
+class NavigationManager(reactContext: ReactApplicationContext) :
+ NativeNavigationManagerSpec(reactContext) {
+ override fun navigate(name: String) {
+ NavigationHelper.routerName = name
+ AppManager.lastActivity()
+ ?.startActivity(Intent(AppManager.lastActivity(), BuzActivity::class.java))
+ }
+
+ override fun pop(name: String?) {
+
+ }
+
+}
\ No newline at end of file
diff --git a/android/app/src/main/java/com/trust/ywx/specs/navigation/NavigationHelper.kt b/android/app/src/main/java/com/trust/ywx/specs/navigation/NavigationHelper.kt
new file mode 100644
index 0000000..ea776ec
--- /dev/null
+++ b/android/app/src/main/java/com/trust/ywx/specs/navigation/NavigationHelper.kt
@@ -0,0 +1,5 @@
+package com.trust.ywx.specs.navigation
+
+object NavigationHelper {
+ var routerName: String = "app"
+}
\ No newline at end of file
diff --git a/android/app/src/main/res/layout/activity_main.xml b/android/app/src/main/res/layout/activity_main.xml
new file mode 100644
index 0000000..41d2ef1
--- /dev/null
+++ b/android/app/src/main/res/layout/activity_main.xml
@@ -0,0 +1,6 @@
+
+
+
+
\ No newline at end of file
diff --git a/package.json b/package.json
index e5a18e5..be774f2 100644
--- a/package.json
+++ b/package.json
@@ -14,14 +14,13 @@
"build-android-hospital": "react-native bundle --platform android --dev false --entry-file src/hospital/hospital.ts --bundle-output ./bundle/hospital.android.bundle --assets-dest ./bundle --config metro.main.config.js --minify true --reset-cache"
},
"codegenConfig": {
- "name": "SpecsManager",
+ "name": "SpecManager",
"type": "modules",
- "jsSrcsDir": "./src/specs",
+ "jsSrcsDir": "specs",
"android": {
"javaPackageName": "com.trust.ywx.specs"
}
},
-
"dependencies": {
"@react-native-async-storage/async-storage": "^2.2.0",
"@react-native/new-app-screen": "0.80.1",
diff --git a/src/specs/SpecsManager.ts b/specs/NativeNavigationManager.ts
similarity index 100%
rename from src/specs/SpecsManager.ts
rename to specs/NativeNavigationManager.ts
diff --git a/specs/README.md b/specs/README.md
new file mode 100644
index 0000000..2418139
--- /dev/null
+++ b/specs/README.md
@@ -0,0 +1 @@
+# 文件名必须`Native`开头
diff --git a/src/app/App.tsx b/src/app/App.tsx
index d091223..90e549b 100644
--- a/src/app/App.tsx
+++ b/src/app/App.tsx
@@ -5,8 +5,14 @@
* @format
*/
-import { NewAppScreen } from '@react-native/new-app-screen';
-import { StatusBar, StyleSheet, useColorScheme, View } from 'react-native';
+import {
+ Button,
+ StatusBar,
+ StyleSheet,
+ useColorScheme,
+ View,
+} from 'react-native';
+import { pushByName } from '../common/NavigationHelper.ts';
function App() {
const isDarkMode = useColorScheme() === 'dark';
@@ -14,7 +20,13 @@ function App() {
return (
-
+
+
);
}
diff --git a/src/common/NavigationHelper.ts b/src/common/NavigationHelper.ts
index 45a6ebd..e28fba4 100644
--- a/src/common/NavigationHelper.ts
+++ b/src/common/NavigationHelper.ts
@@ -1,10 +1,10 @@
import { storageApp } from './StorageHelper.ts';
-import NavigationManager from '../specs/SpecsManager.ts';
+import NavigationManager from '../../specs/NativeNavigationManager.ts';
export const pushByName = (name: string, params: any) => {
storageApp
.save({
- key: 'MessageActivity',
+ key: `MessageActivity_${name}`,
data: params,
expires: 1000 * 3600,
})
@@ -12,3 +12,8 @@ export const pushByName = (name: string, params: any) => {
NavigationManager.navigate(name);
});
};
+export const pop = (name: string) => {
+ storageApp.remove({ key: `MessageActivity_${name}` }).finally(() => {
+ NavigationManager.pop(name);
+ });
+};
diff --git a/src/common/common.ts b/src/common/common.ts
index 24ea807..80a3a51 100644
--- a/src/common/common.ts
+++ b/src/common/common.ts
@@ -1,2 +1,3 @@
import 'react';
import 'react-native';
+import './NavigationHelper';
diff --git a/src/hospital/Hospital.tsx b/src/hospital/Hospital.tsx
new file mode 100644
index 0000000..f8a4e8b
--- /dev/null
+++ b/src/hospital/Hospital.tsx
@@ -0,0 +1,41 @@
+/**
+ * Sample React Native App
+ * https://github.com/facebook/react-native
+ *
+ * @format
+ */
+
+import {
+ Button,
+ StatusBar,
+ StyleSheet,
+ useColorScheme,
+ View,
+} from 'react-native';
+import { pop } from '../common/NavigationHelper.ts';
+
+function Hospital() {
+ const isDarkMode = useColorScheme() === 'dark';
+
+ return (
+
+
+
+ 互联网医院
+
+ );
+}
+
+const styles = StyleSheet.create({
+ container: {
+ flex: 1,
+ },
+});
+
+export default Hospital;
diff --git a/src/hospital/hospital.ts b/src/hospital/hospital.ts
index e69de29..a1a4c9a 100644
--- a/src/hospital/hospital.ts
+++ b/src/hospital/hospital.ts
@@ -0,0 +1,4 @@
+import { AppRegistry } from 'react-native';
+import Hospital from './Hospital.tsx';
+
+AppRegistry.registerComponent('hospital', () => Hospital);