Android TextChangedListener 和 OnKeyListener 干扰
Android TextChangedListener and OnKeyListener interfere
我有一个 activity 和一个 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()
我有一个 activity 和一个 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()