我的活动包含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
,然后按后退按钮,处理后面的代码根本不会调用。
有谁知道这里发生了什么?
任何帮助将不胜感激。
答案 0 :(得分:1)
因为使用方法setBackButtonAction
,您只在根视图上设置onKeyListener,当您的EditText设置为焦点时,它将找到EditText的onKeyListener,但不会找到根视图的onKeyListener。
要覆盖后退行为,您应该覆盖onBackPressed()