【问题标题】:Xamarin Forms - Duplicate ScreensXamarin 表单 - 重复屏幕
【发布时间】:2018-11-23 14:51:24
【问题描述】:

我正在使用 Xamarin Forms 编写应用程序,我遇到了一个问题,希望有人能提供帮助。

我的应用程序包含一个屏幕,该屏幕具有多个可以按下的图标,然后将打开一个新屏幕。

我的问题是,如果您非常快地按两次图标,应用程序会打开同一个屏幕的 2 个实例(这不仅与双击有关,如果您非常快地按 6 次图标,它将打开 6重复屏幕)。按下返回按钮,关闭顶部屏幕以显示下面的重复屏幕。再次按“返回”按钮可将您导航回原始屏幕。

这个问题似乎出现在我的应用程序中的任何屏幕上,所以我希望其他人会经历过它并知道防止显示重复屏幕的解决方案。

【问题讨论】:

    标签: xamarin.forms


    【解决方案1】:

    这是 TapEvents 中的一个已知问题。

    我的技巧是,在代码隐藏中,有一个布尔变量 _canTap。

    在你调用的推送新页面的方法中,首先检查是否canTap,然后设置为false,只有在导航到另一个页面后才设置为true。这样所有的点击都会被忽略。

    例子:

     private bool _canTap = true;
    
    
    public void YourMethod()
    {
        if(_canTap)
        {
             _canTap = false;
             YourMethodToNavigate();
             _canTap = true;
        }
     }
    

    【讨论】:

      【解决方案2】:

      在 Icon_Pressed 方法中添加这个,

      this.IsEnabled = false;
      
      await Navigation.PushAsync(new MyPage());
      
      this.IsEnabled = true;
      

      它会禁用页面,直到当前的图标按下事件完成

      【讨论】:

        【解决方案3】:

        这是 Xamarin 应用程序的已知问题。我使用了一个私有变量和try-finally 模式来解决这个问题。例如:

        bool allowTap = true;
        
        public void ButtonTapped()
        {
            try
            {
                if(allowTap)
                {
                    allowTap = false;
                    // Do whatever...
                }
            }
            finally
            {
                allowTap = true;
            }
        }
        

        finally 确保无论发生什么事情都将 allowTap 设置回 true,除非完全崩溃。请注意,如果需要,您还可以在 try 和 finally 块之间使用 catch 块来获取任何错误。

        【讨论】:

          猜你喜欢
          • 2019-12-16
          • 2018-06-29
          • 1970-01-01
          • 2019-04-12
          • 1970-01-01
          • 2020-12-04
          • 1970-01-01
          • 1970-01-01
          • 2018-09-18
          相关资源
          最近更新 更多