从React Native Fragment Back Press更新Android活动的Actionbar标题



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答案

最新更新