android 当背景屏幕变为其他屏幕时关闭警报对话框

hkmswyz6  于 2023-05-27  发布在  Android
关注(0)|答案(4)|浏览(153)

bounty还有2天到期。此问题的答案有资格获得+50声望奖励。Happy正在寻找一个答案从一个有信誉的来源

我在我的android手机上显示了一个使用react原生代码的警报对话框。
当用户单击屏幕上的按钮时,将显示此信息。

Alert.alert(
  title,
  message,
  [
    {
      text: buttonNegativeText,
      style: 'cancel',
      onPress: () => {
        onNegativePress();
      },
    },
    {
      text: buttonPositiveText,
      style: positiveStyle,
      onPress: () => {
        onPositivePress();
      },
    },
  ],
  {cancelable: cancelable},
);

};
一旦用户离开应用10秒(例如),就会有一个来自本机代码的事件,该事件将注销应用。当应用程序被注销,这意味着现有的屏幕将被移动,新的登录屏幕将显示。
发生的事情是,警报对话框仍然在新屏幕中。我想在屏幕移动时关闭警报对话框。
有一件事,我们可以做的是,我们应该从本地监听事件并关闭对话框。
但是,当当前屏幕移动到其他屏幕时,现有屏幕的警报屏幕是否会自动关闭。
我不确定我是否问了正确的问题。请帮忙。

bvjxkvbb

bvjxkvbb2#

React Native Alert Doc上可以看到,无法通过编程关闭警报。而且没有示例对象来处理从native到react native的alert对话框。
如果您真的希望在应用中使用原生警报,您可以创建自定义原生代码来显示原生警报**,然后根据某些逻辑暴露方法以隐藏当前示例**。

pengsaosao

pengsaosao3#

您可以使用addListeners监听导航,并尝试useEffect,如下所示:

useEffect(() => {
  const unsubscribe = navigation.addListener('blur', () => {
    Alert.alert('', '', []);
  });

  return unsubscribe;
}, []);

这样,我们就可以在导航发生时取消订阅警报通知。

lyr7nygr

lyr7nygr4#

您可以使用useIsFocused

import { useIsFocused } from '@react-navigation/native';

const isFocused = useIsFocused();
 useEffect(() => {
 if (isFocused) {
    // Show the alert when the screen is focused
    Alert.alert('Screen is focused');
 } else {
    // Hide the alert when the screen is unfocused
    Alert.alert('Screen is unfocused');
 }
 // Clean up the alert when the component is unmounted or screen focus changes
 return () => {
  Alert.alert('Clean up');
 };
}, [isFocused]);

相关问题