如何知道SearchView在操作栏中何时关闭?

时间:2014-09-16 23:10:26

标签: android list listview searchview

我遇到了问题:listView中有Fragment,我实施了searchView(actionView),使用searchView listView过滤onQueryTextChange中的列表事件。我在这部分没有问题,一切正常。

adapter = new ListaEmpleadosAdapter(getActivity(), empleadoItems, context);
SearchView searchView = (SearchView) menu.findItem(R.id.menu_buscar).getActionView();

SearchView.OnQueryTextListener queryTextListener = new SearchView.OnQueryTextListener() {
    @Override
    public boolean onQueryTextSubmit(String s) {
        return false;
    }

    @Override
    public boolean onQueryTextChange(String s) {
        try {
            adapter.getFilter().filter(s);
            adapter.notifyDataSetChanged();
        } catch (Exception e) {
            System.err.println("ERROR FragmentEmpleado -> " + e.toString());
        }
        return true;
    }
};

当我第一次搜索并按下后退按钮时,软键盘关闭。这是正常的。当我再次按下后退按钮时,searchView关闭,这是正常的,但列表没有返回到初始项目。

如果在解压缩searchView时(因为searchView.setOnCloseListener无效)还原初始列表项,我怎么能得到这个事件?或者以任何方式恢复删除适配器过滤器的初始列表项...

历史:

  1. 员工名单
  2. list of employees

    1. 具有特定过滤器的员工列表(按下第一个后退按钮后,键盘关闭)
    2. The list of employees with a specific filter

      1. 关闭了searchView的员工列表(但按下第二个按钮后没有恢复原始列表)
      2. list of employees with searchView closed

        非常感谢!

1 个答案:

答案 0 :(得分:6)

SearchView上有一个方法会在搜索视图崩溃(onActionViewCollapsed)时被触发,但没有任何事件。为了解决这个问题,我创建了自己的类继承自SearchView并定义了2个事件来捕获折叠和扩展。该类还提供了连接事件处理程序的方法。

public class MySearchView extends SearchView {

    OnSearchViewCollapsedEventListener mSearchViewCollapsedEventListener;
    OnSearchViewExpandedEventListener mOnSearchViewExpandedEventListener;

    public MySearchView(Context context) {
        super(context);
    }

    @Override
    public void onActionViewCollapsed() {
        if (mSearchViewCollapsedEventListener != null)
            mSearchViewCollapsedEventListener.onSearchViewCollapsed();
        super.onActionViewCollapsed();
    }

    @Override
    public void onActionViewExpanded() {
        if (mOnSearchViewExpandedEventListener != null)
            mOnSearchViewExpandedEventListener.onSearchViewExpanded();
        super.onActionViewExpanded();
    }

    public interface OnSearchViewCollapsedEventListener {
        public void onSearchViewCollapsed();
    }

    public interface OnSearchViewExpandedEventListener {
        public void onSearchViewExpanded();
    }

    public void setOnSearchViewCollapsedEventListener(OnSearchViewCollapsedEventListener eventListener) {
        mSearchViewCollapsedEventListener = eventListener;
    }

    public void setOnSearchViewExpandedEventListener(OnSearchViewExpandedEventListener eventListener) {
        mOnSearchViewExpandedEventListener = eventListener;
    }


}