i具有嵌入在Android应用程序中的React本机功能。我需要从React Native屏幕上更新Android活动的动作栏。我通过使用桥并从JS文件调用桥梁来工作。
我现在已经面对一个问题了一段时间,如果我从一个React本机屏幕导航到另一个React屏幕,并且Action Bar标题正确更新,但是如果我使用" Back Back Button "回到上一个屏幕,它不会更新操作栏标题。这是代码片段:
bridge.java
@ReactMethod
public void setActionBarTitle(String title) {
final String actionBarTitle = title;
runOnUiThread(new Runnable() {
@Override
public void run() {
final Activity activity = getCurrentActivity();
activity.setTitle(actionBarTitle);
}
});
}
reactscreen.js
componentDidMount() {
NativeModules.ActivityStarter.setActionBarTitle(this.props.item.defectType)
}
我也尝试使用ComponentWillReceiveProps((,但是在使用Android中的备用按钮时,它似乎不会被回调。
另外,我正在使用React-Navigation的StackNavigator,因此它提供了覆盖后按钮按下的反手,但似乎不是一个正确的解决方案,我认为其中一种生命周期方法应该在背上接听回调按。
,而不是在componentdidmount((中设置ActionBar标题,现在我正在使用Navigator中使用onNavigationStateChange((,而是通过迭代通过状态来检测当前屏幕。
app.js
const App = () => (
<Provider store={store}>
<Navigator
onNavigationStateChange={(prevState, currentState) => {
if (Platform.OS === 'android') {
const prevScreen = this.findRouteNameFromNavigatorState(prevState);
const currentScreen = this.findRouteNameFromNavigatorState(currentState);
if (prevScreen !== currentScreen) {
this.setActionBarTitle(currentState, currentScreen);
}
}
}}
/>
</Provider>
);
findRouteNameFromNavigatorState = (state) => {
const route = this.getRoute(state);
if (route !== undefined)
return route.routeName;
};
参考:pensierinmusica答案