如何关闭/关闭/折叠 MainActivity 中 ActionBar 中的 SearchView?

新手上路,请多包涵

我试图在输入一个值后清除并关闭 SearchView。我找到了一个解决方案,但它会关闭搜索,如果我再次尝试搜索,它不会执行任何操作。

 @Override
public boolean onCreateOptionsMenu(Menu menu) {
    getMenuInflater().inflate(R.menu.activity_main_actions, menu);

    searchView = (SearchView) menu.findItem(R.id.action_search).getActionView();
    searchView.setOnQueryTextListener(searchListener);

    return super.onCreateOptionsMenu(menu);
}

SearchView.OnQueryTextListener searchListener = new SearchView.OnQueryTextListener(){
    @Override
    public boolean onQueryTextChange(String arg0) {
        return false;
    }
    @Override
    public boolean onQueryTextSubmit(String query) {
        new JsoupGetData("http://api.openweathermap.org/data/2.5/find?q="+ query + "&lang=pl").execute();
        try {
            searchView.onActionViewCollapsed();
        }
        catch(Exception ex){
            ex.printStackTrace();
            System.out.println(ex);
        }
        return true;
    }
};

我只能第一次搜索。每次下一次它只会关闭我的输入键盘并且什么都不做。如何以正确的方式执行?

编辑。建议的更改如下所示:

         try {
            searchView.setIconified(true);
        }

activity_main_actions.xml:

    <!-- Search Widget -->
   <item android:id="@+id/action_search"
       android:icon="@drawable/ic_action_search"
       android:title="@string/action_search"
       android:showAsAction="always"
       android:actionViewClass="android.widget.SearchView"/>

编辑2:

我更改了 showAsAction="always|collapseActionView" 但是当我单击搜索时它关闭了我的应用程序。

我还将侦听器放在 OnCreateOptionsMenu 中,看看它是否改变了什么:

 @Override
public boolean onCreateOptionsMenu(Menu menu) {
    getMenuInflater().inflate(R.menu.activity_main_actions, menu);
    searchMenuItem = menu.findItem(R.id.action_search);
    searchView = (SearchView) searchMenuItem.getActionView();
    searchView.setOnQueryTextListener(new OnQueryTextListener(){

            @Override
            public boolean onQueryTextChange(String arg0) {
                return false;
            }

            @Override
            public boolean onQueryTextSubmit(String query) {
                if (searchMenuItem != null) {
                    boolean closed = searchMenuItem.collapseActionView();
                    Toast.makeText(getApplicationContext(), "closing: " + closed, Toast.LENGTH_SHORT).show();
                }
                new JsoupGetData("http://api.openweathermap.org/data/2.5/find?q="+ query + "&lang=pl").execute();
                return false;
            }
    });
    return super.onCreateOptionsMenu(menu);
}

closed 布尔值是 false - 我不知道为什么。我阅读 了文档,但它什么也没告诉我。

编辑3:

我在网上读了太多关于这个主题的内容,但我还不清楚。清除搜索小部件,隐藏键盘并执行操作。唯一的问题是搜索没有折叠,因此它覆盖了 ActionBar 上的其余操作按钮。

             @Override
            public boolean onQueryTextSubmit(String query) {
                searchView.setIconified(true);
                searchView.clearFocus();
                new JsoupGetData("http://api.openweathermap.org/data/2.5/find?q="+ query + "&lang=pl").execute();
                return false;
            }

在这里 我读到 collapseActionView() 将不起作用,因为我的搜索不是视图而是小部件。

原文由 Kamil 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 328
1 个回答

采用:

searchMenuItem.collapseActionView();

代替:

searchView.onActionViewCollapsed();

如果您使用的是 AppCompat library ,则使用:

MenuItemCompat.collapseActionView(searchMenuItem);

原文由 Newinjava 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题