我有以下代码:
using Android.App;
using Android.OS;
using Android.Util;
using Android.Views;
namespace TestIt {
[Activity( Label = "TestIt", MainLauncher = true, Icon = "@drawable/icon", Theme = "@android:style/Theme.Dialog" )]
public class TestIt:Activity {
public static readonly string progName = "TestIt";
public static AlertDialog builder = null;
protected override void OnCreate(Bundle bundle) {
base.OnCreate(bundle);
Log.Debug(progName, "OnCreate entered");
builder = (new AlertDialog.Builder( this )).Create();
Log.Debug(progName, "Build Alert");
builder.Window.SetType(WindowManagerTypes.SystemAlert);
builder.SetCancelable(true);
builder.SetTitle("Test");
builder.SetMessage("This is a test message");
builder.Show();
Log.Debug(progName, "Build Alert Ending");
}
public override void OnBackPressed() {
Log.Debug(progName, "OnBackPressed Entered");
if(builder != null) {
builder.Cancel();
}
base.OnBackPressed();
Finish();
}
}
}
一切正常,并显示警报。
但按下后退键时未输入OnBackPressed。
相反,我在LogCat中收到消息:
尝试完成输入事件但输入事件接收器已经处理完毕。
我已经看过几个Java和几个Xamarin尝试解决这个问题,但这个技术通常深藏在样本的功能中。
有人可以提供一些关于如何调整此代码的C#(Xamarin)洞察,以便输入OnBackPressed(或替代方案)。
我只需要触及Back键。
此致 吉姆
答案 0 :(得分:1)
这是因为,对话框首先消耗后退按钮。此按下取消对话框。按下另一个按钮将调用重载方法。
如果用户取消对话框,我假设您要关闭活动。如果是这样,只需对此做出反应:
protected override void OnCreate(Bundle bundle)
{
base.OnCreate(bundle);
// ...
// attach the event listener
builder.CancelEvent += OnDialogCancel;
builder.Show();
}
private void OnDialogCancel(object sender, EventArgs eventArgs)
{
builder.CancelEvent -= OnDialogCancel;
Finish();
}
如果您确实需要按下“后退”按钮,则在显示对话框时,您必须继承自己的对话框并覆盖OnBackPressed
。
public class MainActivity : Activity
{
// ...
protected override void OnCreate(Bundle bundle)
{
base.OnCreate(bundle);
// ...
builder = new MyAlertDialog(this);
Log.Debug(progName, "Build Alert");
builder.SetCancelable(true);
builder.SetTitle("Test");
builder.SetMessage("This is a test message");
builder.Show();
Log.Debug(progName, "Build Alert Ending");
}
}
public class MyAlertDialog : AlertDialog
{
public MyAlertDialog(Context context) : base(context)
{
}
public override void OnBackPressed()
{
Log.Debug("foo", "OnBackPressed Entered");
base.OnBackPressed();
}
}
答案 1 :(得分:0)
public override void OnBackPressed()
{
AlertDialog.Builder alert = new AlertDialog.Builder(this);
alert.SetTitle("msgConfirm");
alert.SetMessage("msgSureExit");
alert.SetPositiveButton("msgYes"), (sender, args) =>
{
this.FinishAffinity();
});
alert.SetNegativeButton("msgNo"), (sender, args) =>
{
});
Dialog dialog = alert.Create();
dialog.Show();
}
这是更简单的方法。这可以帮助某人。如果这很有用,那么回复@ user1047857。 :)快乐的编码。