Android TextChangedListener和OnKeyListener会干扰

时间:2015-08-30 06:14:14

标签: android android-fragments android-edittext textwatcher

我的活动包含viewpager和4 fragments作为网页。

在我需要处理后退按钮按下的一个片段内,所以我这样做:

public void setBackButtonAction(final View view)
{
    //view is root view of fragment
    view.setFocusableInTouchMode(true);
    view.setOnKeyListener(new View.OnKeyListener()
    {
        @Override
        public boolean onKey(View v, int keyCode, KeyEvent event)
        {
            if (event.getAction() == KeyEvent.ACTION_UP && keyCode == KeyEvent.KEYCODE_BACK)
            {
                if (currentView == VIEW_MODE_ALL_CAT)
                {
                    return false;
                }
                else if (currentView == VIEW_MODE_THIS_CAT)
                {
                    currentView = VIEW_MODE_ALL_CAT;
                    // do something
                    return true;
                }
            }

            return false;
        }
    });
}
到目前为止,这很好,这可以按预期工作。

我在这个片段中有EditText,我需要将它连接到适配器以过滤结果,我这样做:

public void setSearchFilterListener()
{
    searchFilter.addTextChangedListener(new TextWatcher()
    {
        @Override
        public void beforeTextChanged(CharSequence s, int start, int count, int after)
        {
        }

        @Override
        public void onTextChanged(CharSequence s, int start, int before, int count)
        {
            mAdapter.getFilter().filter(s);
        }

        @Override
        public void afterTextChanged(Editable s)
        {
        }
    });
}

这也和预期的一样。

如果我使用此EditText,然后按后退按钮,处理后退按钮的代码根本不会调用。

刚刚发生了什么?如果我打开应用程序并按下后退按钮,则会调用代码进行处理,如果我使用 EditText,然后按后退按钮,处理后面的代码根本不会调用。

有谁知道这里发生了什么?

任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:1)

因为使用方法setBackButtonAction,您只在根视图上设置onKeyListener,当您的EditText设置为焦点时,它将找到EditText的onKeyListener,但不会找到根视图的onKeyListener。

要覆盖后退行为,您应该覆盖onBackPressed()