: onPress işleyicisi olarak,
import {
NativeModules
} from 'react-native';
const NativeNameSubmission = NativeModules.NameSubmission;
...
<Button
onPress={() => NativeNameSubmission.submitName(this.state.firstName, this.state.lastName)}
title="Submit"/>
Anadiliniz Modülü böyle bir şey olmazdı senin Yerli Modülü arayıp parametreleri geçerdi modülünüzün etkinliğinizin referansına erişmesi gerekiyor.
İşte iki çözüm vardır:
- Senin modülü kullanılmak üzere ihtiyacı hatırlamak, modül
kurucuları içindedir etkinlik başvuru geçirin Ama -
aktivitesinin bir iç sınıf olarak modül beyan Bir ReactPackage
ve ReactPackage
bir arabirimdir, bu nedenle isterseniz, Reaktivite arayüzünüzü uygulayarak (yeni bir sınıf oluşturmak yerine) kullanabilirsiniz. İşte
bir faaliyet
ReactPackage
uygulayan bir
inner class
ve kullanarak tam çalışma örneğidir: başlatabilir, sonra
public class MyReactActivity extends AppCompatActivity
implements DefaultHardwareBackBtnHandler, ReactPackage
{
private ReactRootView mReactRootView;
private ReactInstanceManager mReactInstanceManager;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mReactRootView = new ReactRootView(this);
mReactInstanceManager = ReactInstanceManager.builder()
.setApplication(getApplication())
.setBundleAssetName("index.android.bundle")
.setJSMainModuleName("index.android")
.addPackage(new MainReactPackage())
// This activity is also a "ReactPackage"
.addPackage(this)
.setUseDeveloperSupport(BuildConfig.DEBUG)
.setInitialLifecycleState(LifecycleState.RESUMED)
.build();
mReactRootView.startReactApplication(mReactInstanceManager, "MyReactComponent", null);
setContentView(mReactRootView);
}
@Override
public List<NativeModule> createNativeModules(ReactApplicationContext reactContext) {
List<NativeModule> modules = new ArrayList<>();
// The module is added to the ReactPackage
modules.add(new TestModule(reactContext));
return modules;
}
@Override
public List<ViewManager> createViewManagers(ReactApplicationContext reactContext) {
return Collections.emptyList();
}
// Module definition as an inner class
public class TestModule extends ReactContextBaseJavaModule {
public TestModule(ReactApplicationContext reactContext) {
super(reactContext);
}
@Override
public String getName() {
return "TestModule";
}
// The function you'll call from React Native
@ReactMethod
public void closewithresult(float datafromreact) {
// Set a result
Bundle bundle = new Bundle();
bundle.putFloat("result", datafromreact);
setResult(Activity.RESULT_OK, (new Intent()).putExtras(bundle));
// Close the activity
finish();
}
}
/*
* Other overrided functions
* (not relevant for this question)
*/
@Override
public void invokeDefaultOnBackPressed() {
super.onBackPressed();
}
@Override
protected void onPause() {
super.onPause();
if (mReactInstanceManager != null) {
mReactInstanceManager.onHostPause(this);
}
}
@Override
protected void onResume() {
super.onResume();
if (mReactInstanceManager != null) {
mReactInstanceManager.onHostResume(this, this);
}
}
@Override
protected void onDestroy() {
super.onDestroy();
if (mReactInstanceManager != null) {
mReactInstanceManager.onHostDestroy(this);
}
}
@Override
public void onBackPressed() {
if (mReactInstanceManager != null) {
mReactInstanceManager.onBackPressed();
} else {
super.onBackPressed();
}
}
@Override
public boolean onKeyUp(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_MENU && mReactInstanceManager != null) {
mReactInstanceManager.showDevOptionsDialog();
return true;
}
return super.onKeyUp(keyCode, event);
}
}
senin böyle ReactActivity
:
Intent intent = new Intent(getApplicationContext(), MyReactActivity.class);
startActivityForResult(intent, 123);
böyle bir sonuç alın:
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == 123 && resultCode == Activity.RESULT_OK) {
float result = data.getExtras().getFloat("result");
// Do whatever you want with "result"
}
}
Ve jus t Kullanılabilir:
import { NativeModules } from 'react-native';
// [...]
// Call the function
NativeModules.TestModule.closewithresult(654.532);
Yerel kod ile iyi değilim, ancak istenen veriyi parametre olarak kullanarak yeni bir yerel yöntem çalıştırılamıyor musunuz? – bennygenel
Ben hedefinize ulaşmak için, 'android niyet' başvurmak gerektiğini düşünüyorum, tepkiyi çekmek için java içinde niyetini kullanın, sonra sonuç ile niyetinde niyetle https://facebook.github.io/react-native/releases/0.21/docs /intentandroid.html –