如何在MainActivity中解除/关闭/解除ActionBar中的SearchView?

Kam*_*mil 22 android android-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;
    }
};
Run Code Online (Sandbox Code Playgroud)

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

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

        try {
            searchView.setIconified(true);
        }
Run Code Online (Sandbox Code Playgroud)

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"/>
Run Code Online (Sandbox Code Playgroud)

EDIT2:

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);
}
Run Code Online (Sandbox Code Playgroud)

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

EDIT3:

我在这个问题上读了太多的互联网,但我还不清楚.清除搜索小部件,隐藏键盘并执行操作.唯一的问题是搜索没有折叠,所以它覆盖了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;
            }
Run Code Online (Sandbox Code Playgroud)

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

New*_*ava 45

使用:

searchMenuItem.collapseActionView();

代替:

searchView.onActionViewCollapsed();

如果您正在使用AppCompat library,请使用:

MenuItemCompat.collapseActionView(searchMenuItem);


Raf*_*ael 12

在我的情况下,调用invalidateOptionsMenu();关闭SearchView


str*_*ils 1

听起来您正在寻找的是一种以编程方式关闭搜索栏的方法。不幸的是,没有方法或等效的解决方法可以解决此问题。您可能已经看过另一篇文章,其中有一些建议,但没有真正的方法来做到这一点。

您在上面调用的第一个编辑setIconified(true)是最好的选择。文档建议调用setIconified(true)应该折叠搜索小部件,清除它,如果属性iconifiedByDefault为真(默认情况下是这样,所以我没有看到您的activity_main_actions.xml有任何问题),请将其从焦点中删除。