Search code examples
xamarin.formsprism

Prevent double tapping android Prism xamarin


I know this is a common questions,but I could not find an answer anywhere.

I want to prevent "quick double tapping" in Android.

I m using prism and Im not sure how I should implement/make use of "CanNavigateAsync(INavigationParameters).

Suppose I have a toolbarItem to "Add something" and this is mapped to a command and I do the following:

    private DelegateCommand<MyVM> tappedToolbarItemCommand;
    public DelegateCommand<MyVM> TappedToolbarItemCommand
    {
        get
        {
            return tappedToolbarItemCommand
                   ?? (tappedToolbarItemCommand = new DelegateCommand<MyVM>(async args => await OnToolbarItemTapped(args))
                       .ObservesProperty(() => !IsBusy)
                       .ObservesCanExecute(CanExecute());
        }
    }

    private bool CanExecute()
    {
        if (IsBusy) return false;

        //HOW DO I MAKE USE OF "CanNavigateAsync"
        CanNavigateAsync(??) what parameters?
        return true;
    }

    private async Task OnToolbarItemTapped(MyVM vm)
    {           
        await NavigationService.NavigateAsync($"NavPage/{nameof(MyPage)}");                        
    }

So How do you prevent double tapping using Prism ?

Many thanks


Solution

  • You'll be able to simply do this to prevent a double click:

      private bool _canNavigate = true;
      public bool CanNavigate
      {
            get { return _canNavigate; }
            set { SetProperty(ref _canNavigate, value); }
      }
    
     NavigateCommand = new DelegateCommand(Navigate).ObservesCanExecute((vm) => CanNavigate);
    
     async void Navigate()
     {
            CanNavigate = false;
            await _navigationService.NavigateAsync("ViewB");
            CanNavigate = true;
     }
    

    There is related link. https://github.com/PrismLibrary/Prism/issues/442