将TextChanged和KeyPressed事件处理程序添加到EditText使OnBackPressed不会命中

时间:2014-08-15 10:05:21

标签: c# android xamarin.android

我一直致力于一个有3项活动的应用程序(让我们说A,B,C)

  1. A使用StartActivity(typeof(B))
  2. 调用B.
  3. B使用StartActivity(typeof(C))调用C并使用完成自身 this.finish()
  4. C在LinearLayout中有一个全屏EditText。 C也被覆盖了 OnBackPressed它调用this.finish()来完成自己并导航 回到A [因为A仍然在BackStack中]。在C的OnCreate方法中, EditText的EventHandlers已添加了TextChanged事件和KeyPressed 事件如下:
  5. public void OnCreate(Bundle SavedInstanceBundle) 
    {
        base.OnCreate(SavedInstanceBundle);
        SetContentView(Resource.Layout.EditTextLayout);
        EditText editText = FindViewById<EditText>(Resource.Id.editText);
        //ADDING EVENT HANDLERS FOR EDITTEXT'S TEXTCHANGED AND KEYPRESSED EVENTS
        editText.TextChanged += editText_TextChanged;
        editText.KeyPressed += editText_KeyPressed;
    }
    
    private void editText_TextChanged (object sender, TextChangedEventArgs e)
    {
    }
    
    private void editText_KeyPressed (object sender, View.KeyEventArgs e)
    {
    }
    
    public override void OnBackPressed() 
    {
        base.OnBackPressed();
        this.finish();
    }
    

    这里的问题是当事件处理程序代码存在时,OnBackPressed就是 按下硬件后退时从未执行过。但是,当添加事件时 处理程序代码将被删除,最终OnBackPressed启动 工作正常。

1 个答案:

答案 0 :(得分:0)

您可以确定用户是否按下了KeyPressed事件处理程序中的Back键:

private void editText_KeyPressed (object sender, View.KeyEventArgs e)
{
    if (e.KeyCode == Keycode.Back)
    {
        this.Finish();
        e.Handled = true;
        return;
    }
}