【问题标题】:Android Back key cycling focus instead of returning to previous activityAndroid Back键循环焦点而不是返回到以前的活动
【发布时间】:2013-02-27 12:19:29
【问题描述】:

我有这个布局

两个 SearchView 小部件
一个列表视图

当我按下 android 后退键时,焦点会在过滤框和搜索框之间循环。
我想回到我之前的活动,但我做不到,因为返回键只能从一个盒子转到另一个盒子。
如何获取返回按键事件?

这段代码甚至没有被调用

@Override
public void onBackPressed() {
    setResult(Activity.RESULT_CANCELED);
    super.onBackPressed();   
}

【问题讨论】:

    标签: android listview back searchview


    【解决方案1】:

    问题肯定出在 SearchView 小部件及其对焦点/后键的处理上。
    我将 SearchViews 更改为 EditTexts
    我将 QueryTextListeners 更改为 TextWatchers
    还有……瞧!

    现在 onBackPressed() 被调用,Activity 可以返回到之前的调用者。

    【讨论】:

      【解决方案2】:

      您可以覆盖活动的 onBackPressed() 方法来执行您想要在按下后退键时执行的任何工作

      您可以在后退键按下时调用以前的活动...例如,

      @override
      public void onBackPressed ()
      {
        Intent intent = new Intent(CurrentActivity.this, PreviousActivity.class);
        startActivity(intent);
        finish();
      
      } 
      

      【讨论】:

      • onBackPressed 永远不会被调用。
      【解决方案3】:

      onBackPressed 总是有问题。您应该尝试使用onKeyDownonKeyUp

      @Override
      public boolean onKeyDown(int keyCode, KeyEvent event)  {
          if (keyCode == KeyEvent.KEYCODE_BACK && event.getRepeatCount() == 0) {
              // do something on back.
              return true;
          }
      
          return super.onKeyDown(keyCode, event);
      }
      

      【讨论】:

      • 试过了,onKeyDown没有被调用,onKeyUp也没有被调用。 ::: 如果我不得不猜测的话,好像 SearchView 小部件正在窃取焦点并且不费心调用它们的超级例程。
      • 你试过dispatchKey...我认为在发送给孩子之前会调用它。
      • @是的,我试过了 ::: 问题肯定出在 SearchView 小部件上,我正在更改为 EditText 和 TextWatchers
      猜你喜欢
      • 2012-06-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-07-20
      • 1970-01-01
      相关资源
      最近更新 更多