我需要從切換REACT NATIVE活動對從JS文件按鈕單擊事件原生Android活動。我已經搜索了很多。請幫幫我。如何切換REACT NATIVE js文件到Android活動
回答
您的原生Android活動
<activity>
<intent-filter>
<data android:scheme="my.special.scheme" />
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT"></category>
</intent-filter>
</activity>
使用Linking openURL API創建的意圖過濾器。
Linking.openURL('my.special.scheme://other/parameters/here')
您可以創建一個模塊,並暴露ReactMethod
到JS將打開活動爲您服務。
public class RctActivityModule extends ReactContextBaseJavaModule {
public static final String REACT_CLASS = "RctActivity";
public RctActivityModule(ReactApplicationContext reactContext) {
super(reactContext);
}
@Override
public String getName() {
return REACT_CLASS;
}
@ReactMethod @SuppressWarnings("unused")
public void startActivity(String extraParam) {
Activity context = ContextProvider.getActivityContext();
if (context != null && !context.isFinishing()) {
Intent rctActivityIntent = new Intent(context, RctActivity.class);
rctActivityIntent.putExtra(RctActivity.EXTRA_PARAM, extraParam);
context.startActivity(rctActivityIntent);
}
}
}
不要忘了你的新模塊添加到您的包
public class RCCPackage implements ReactPackage {
@Override
public List<NativeModule> createNativeModules(ReactApplicationContext reactContext) {
return Arrays.<NativeModule>asList(
new RctActivityModule(reactContext)
);
}
@Override
public List<Class<? extends JavaScriptModule>> createJSModules() {
return Collections.emptyList();
}
@Override
public List<ViewManager> createViewManagers(ReactApplicationContext reactContext) {
...
}
}
創建代表你的模塊(RctActivity.js
)JS文件。現在將其放置在react-native項目的根目錄中。
RctActivity.js:
import { NativeModules } from 'react-native';
module.exports = NativeModules.RctActivity;
在你的JavaScript代碼(index.js),導入RctActivity
模塊:
import RctActivity from './RctActivity'
,並使用你露出這樣的方法: RctActivity.startActivity('MyExtraParam');
編輯: 爲了打開一個新的活動,我必須保持對當前正在運行的活動的引用。所以我用這個小幫手類:
public class ContextProvider {
private static WeakReference<Activity> sActivityWR;
public static void setActivityContext(Activity activity) {
if (sActivityWR == null) {
sActivityWR = new WeakReference<>(activity);
}
}
public static Activity getActivityContext() {
return sActivityWR != null ? sActivityWR.get() : null;
}
public static void clearActivityContext() {
if (sActivityWR != null) {
sActivityWR.clear();
}
sActivityWR = null;
}
}
要使用它,其連接到你的基地活動onResume
和方法:
public class RctActivity extends com.facebook.react.ReactActivity {
@Override
protected void onResume() {
Log.v(getTag(), "onResume");
ContextProvider.setActivityContext(this);
super.onResume();
}
@Override
protected void onPause() {
Log.v(getTag(), "onPause");
ContextProvider.clearActivityContext();
super.onPause();
}
}
不要忘了,現在你的MainActivity
需要延長RctActivity
無法解析類「RctActivityModule」中的「ContextProvider」。 – Shivang
上下文提供者是我寫的一個小幫助類。我將它添加到答案 –
我正在導入js文件: import'./home/ttnd/ReactTestProject/android/app/src/main/java/com/reacttestproject/RctActivity'..... and facing錯誤......... 要求未知模塊「./home/ttnd/ReactTestProject/android/app/src/main/java/com/reacttestproject/RctActivity」。如果您確定該模塊在那裏,請嘗試重新啓動打包程序 – Shivang
- 1. 如何樣式React Native切換組件?
- 2. 在React-Native中切換TextInputs
- 3. 如何發送從react-native到android活動的值?
- 4. 從React-Native代碼調用Android活動
- 5. Android:切換活動!
- 6. React JS v React Native
- 7. Android - 從狀態欄切換到活動
- 8. android動畫活動切換
- 9. Arduino + Android:如何切換活動
- 10. react-native:引用外部JS文件
- 11. 基於滾動的切換類React JS
- 12. 從活動切換到MapActivity
- 13. 從android移動到ios react-native
- 14. React Native替換bundle.js
- 15. react-native不生成android的文件
- 16. React Native android build
- 17. React Native Android&Genymotion
- 18. Android Studio/React Native
- 19. React Native - initialProperties Android
- 20. 如何終止活動並切換到另一個活動?
- 21. react-native run-android and react-native開始
- 22. React Native中的react-native run-android
- 23. 如何使用React Native下載文件?
- 24. React Native:活動和指標跟蹤庫?
- 25. Android中的NullPointerException切換活動時
- 26. Android:使用按鈕事件切換到另一個活動?
- 27. Android在切換到新活動時崩潰
- 28. React native bundlle js卡住
- 29. 如何切換react-navigation抽屜
- 30. 如何在Android的React-native中包含'.jar'文件?
我已經嘗試了很多解決它,2答案也無法解決問題。它應該沒有被擱置。 – Shivang