【问题标题】:Android TextChangedListener and OnKeyListener interfereAndroid TextChangedListener 和 OnKeyListener 干扰
【发布时间】:2015-08-30 06:14:14
【问题描述】:

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

有人知道这里发生了什么吗?

任何帮助将不胜感激。

【问题讨论】:

    标签: android android-fragments android-edittext textwatcher


    【解决方案1】:

    因为你的setBackButtonAction方法,你只在根视图上设置了onKeyListener,当你的EditText设置为焦点时,它会找到EditText的onKeyListener,而不是根视图的onKeyListener。

    要可能覆盖回行为,您应该覆盖 onBackPressed()

    【讨论】:

    • 我不能使用onBackPressed(),因为我在Fragment 而不是Activity,并且每个片段中的每个后退按钮的处理方式都不同。但根据你的回答,我也为 editText 设置了keyListener,问题就解决了。 tnx.
    • 最好的解决方案,使用抽象方法 onBackPressed() 创建您自己的 Fragment 类,让您的活动的onBackPressed() 找到活动片段并调用它。它需要更多的工作,但这是最好的。
    • 这很好,但是我有 4 个片段,所以我怎么知道必须调用哪个 onBackPressed()?我知道我必须从viewpager 中找到当前显示的片段,但是如何?
    • stackoverflow.com/questions/18609261/… 这可能会有所帮助
    猜你喜欢
    • 2011-03-11
    • 2020-05-22
    • 1970-01-01
    • 1970-01-01
    • 2013-07-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多