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

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

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

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

        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 bool 值是 false - 我不知道为什么。我读了the doc但它什么也没告诉我。

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

Here我读到 collapseActionView() 不起作用,因为我的搜索不是 View 而是小部件。

最佳答案

用途:

searchMenuItem.collapseActionView();

代替:

searchView.onActionViewCollapsed();

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

MenuItemCompat.collapseActionView(searchMenuItem);

关于android - 如何在 MainActivity 的 ActionBar 中关闭/关闭/折叠 SearchView?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23928253/

相关文章:

android - 在点击操作栏android上隐藏/显示MenuItem

Android Studio渲染异常: "mBaselineAlignedChildIndex of LinearLayout points to a View that doesn' t know how to get its baseline"

android - 无法找到 : ComponentInfo{. 的检测信息 ./android.support.test.runner.AndroidJUnitRunner}

java - 如何使用标准 API 访问 Galaxy s5 上的心率传感器?

java - android sqlcipher java.io.FileNotFoundException : icudt46l. 压缩包

android - 如何以编程方式设置 Android ActionBar 的下一个可聚焦控件

android - 在 ListActivity 中添加操作栏

android - SearchView setOnClickListener 不工作

java - 解决了: SearchView doesn't filter in each child Tab of TabLayout

android - SearchView 建议不适用于一个字符