如何知道操作栏中的SearchView已关闭?

3

我有一个问题:在片段中有一个 listView,我实现了一个 searchView(actionView)来使用搜索视图 onQueryTextChange 事件来过滤 listView 中的列表。这一部分没有问题,一切都运作良好。

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.具有特定过滤器的员工列表(第一次返回按钮按下后,键盘被关闭)
3.关闭 searchView 的员工列表(但第二次返回按钮按下后未恢复原始列表)
非常感谢!

你如何解决问题,我也有同样的问题 #Cristiam Mercado - Jatin Devani
1个回答

6

SearchView有一个在搜索视图折叠时触发的方法(onActionViewCollapsed),但没有相应的事件。为了解决这个问题,我创建了一个继承自SearchView 的类,并定义了两个事件来捕获折叠和展开。该类还提供了方法来连接您的事件处理程序。

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;
    }


}

哦!谢谢啊!对我有效!:) - Cristiam Mercado
1
这对我也起作用,但我必须修改它,以便在调用我们的监听器之前调用super.onActionViewExpanded()。否则,我试图更改的超级onActionViewExpanded的行为仍然会发生。然而,如果您从未想要更改超级的行为,则原始答案是可以的。我想摆脱setQuery(""),这样它就会在打开时记住先前的查询。 - Flyview
我们在哪里调用 MySearchView 类?我有同样的问题。 - Jatin Devani

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接