我有一个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,然后按后退按钮,用于处理后退的代码根本不会调用。

有人知道这是怎么回事吗?

任何帮助,将不胜感激。

最佳答案

因为使用方法setBackButtonAction仅在根视图上设置了onKeyListener,所以当将EditText设置为焦点时,它将找到EditText的onKeyListener,而不是根视图的onKeyListener。

要覆盖优先行为,您应该覆盖onBackPressed()

关于android - Android TextChangedListener和OnKeyListener会干扰,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32293780/

10-10 07:42