2017-12-18 183 views
0

在我的MainActivity,我推翻这样的如何使Xamarin.Android应用程序退出,当两次点击后退按钮(包括点击之间的确认消息)?

public override void OnBackPressed() 
{ 
    Toast toast = Toast.MakeText(this, "Press again to exit", ToastLength.Short); 
    toast.SetMargin(0,0.20f); 
    toast.Show(); 
} 

的OnBackPressed()方法,当用户在MainActivity并单击后退按钮一次,屏幕上的“再次按下此键退出”出现的消息此消息消失几秒钟后。如果用户在屏幕上显示此消息时再次单击后退按钮,我希望应用程序退出,但当消息消失且用户单击后退按钮时,我希望消息再次出现。我已经看到了一些用Java实现的例子,但是我发现很难将这些例子用于Xamarin.Android。

+0

你需要后退按钮两次才能退出?或者是其他东西。 – Janmejoy

+0

Janmejoy是... – Profile2ForStack

+0

好吧然后写一个方法与计数器打两次显示吐司或对话框,并退出 – Janmejoy

回答

1

此代码正常工作。

long lastPress; 

    public override void OnBackPressed() 
    { 
     // source https://stackoverflow.com/a/27124904/3814729 
     long currentTime = DateTime.UtcNow.Ticks/TimeSpan.TicksPerMillisecond; 

     // source https://stackoverflow.com/a/14006485/3814729 
     if (currentTime - lastPress > 5000) 
     { 
      Toast.MakeText(this, "Press back again to exit", ToastLength.Long).Show(); 
      lastPress = currentTime; 
     } 
     else 
     { 
      base.OnBackPressed(); 
     } 
    } 

如果您想使用短吐司长度,请更改时间。

ToastLength.Long = 3500(毫秒)

ToastLength.Short = 2000(毫秒)

0
Toast toast = Toast.MakeText(Application.Context, "Press again to exit", ToastLength.Short); 
bool doubleBackToExitPressedOnce = false; 
public override void OnBackPressed() 
{ 
    if (doubleBackToExitPressedOnce) 
    { 
     toast.Cancel(); 
     base.OnBackPressed(); 
     return; 
    } 

    toast.SetMargin(0, 0.20f); 
    toast.Show(); 

    this.doubleBackToExitPressedOnce = true; 

    new Handler().PostDelayed(() => 
    { 
     doubleBackToExitPressedOnce = false; 
    }, 2000); 

} 
0

最可靠的方法,我建议是这样的:

public static bool doubleBackToExitPressedOnce=true 

public override void OnBackPressed() 
    { 
     if (doubleBackToExitPressedOnce) 
     { 
      FinishAffinity(); 
     } 
     Common.FragmentManager.doubleBackToExitPressedOnce = true; 
     Toast.MakeText(this, Resources.GetString(Resource.String.back_click_on_home), ToastLength.Short).Show(); 
     new Handler().PostDelayed(new RunnableHelper(), 2000); 
    } 

public class RunnableHelper : Java.Lang.Object, IRunnable 

{ 
    public void Run() 
    { 
     doubleBackToExitPressedOnce = false; 
    } 
} 
相关问题