我有一个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/