Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/221.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 如何在MainActivity中关闭/折叠ActionBar中的SearchView?_Android_Android Actionbar_Searchview - Fatal编程技术网

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

Android 如何在MainActivity中关闭/折叠ActionBar中的SearchView?,android,android-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_sear

我试图在输入值后清除并关闭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"/>
而且
闭合的
布尔值是
假的
——我不知道为什么。我读了,但它什么也没告诉我

编辑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()不起作用,因为我的搜索不是一个视图,而是一个小部件。

听起来你想要的是一种以编程方式关闭搜索栏的方法。不幸的是,没有一种方法或等效的解决方法。你可能已经看到了一些建议,但没有真正的方法来做到这一点


上面调用
setIconified(true)
的第一次编辑是最佳选择。文档建议调用
setIconified(true)
应该折叠搜索小部件,清除它,并在属性
iconifiedByDefault
为true(默认情况下为true,因此我认为您的活动\u main\u actions.xml没有任何问题)时将其从焦点中移除.

您好,我遇到了类似的情况,因此我认为将此更改为代码应该可以解决问题。
希望这有帮助……:)

使用:

searchMenuItem.collapseActionView()

而不是:

searchView.onActionViewCollapsed()

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

MenuItemCompat.collapseActionView(searchMenuItem)

提到的解决方案很简单,效果很好

基本上,调用
setQuery(“,false)
setIconified(true)
上的
SearchView

在menu main.xml中添加:

<item android:id="@+id/action_search"
    android:icon="@android:drawable/ic_menu_search"
    android:title="Search"
    app:showAsAction="collapseActionView|ifRoom"
    android:orderInCategory="1"
    app:actionViewClass="android.support.v7.widget.SearchView"
    android:menuCategory="secondary"
    />

在我的例子中,调用
invalidateOptions菜单()关闭SearchView

为什么不使用setIconified()?您不应该调用onActionViewCollapsed()。@Luksprog它只能部分工作。它会删除键入的查询并执行操作,但输入键盘不会隐藏,搜索字段也不会关闭。如何再次搜索?什么都没发生?我已经检查了onActionViewCollapsed()和setIconfied(),都清除了文本,关闭了SearchView并移除了键盘。下一次搜索正常。下一次搜索正常-出现了Internet连接问题。setIconified()清除该字段,但焦点未丢失,并且光标在搜索字段中闪烁,键盘仍处于打开状态。onActionViewCollapsed()将不允许再次搜索,它会隐藏字段,而不会在第一次搜索中删除该值。在接下来的搜索中,它只需关闭键盘。我包含了activity_main_actions.xml的一部分,可能对我的情况有所帮助,setIconified(true);在实际崩溃之前必须按顺序调用两次。您的答案成功了,我正在使用带有
选项菜单的
工具栏
。我的情况与@blueware相同,这也解决了我的问题。谢谢
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.activity_main_actions, menu);
Menu mMenuItem = menu.findItem(R.id.action_search_loc);  // take a reference with menue item
searchView = (SearchView) mMenuItem.getActionView(); //use that to find searchview
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 {
        mMenuItem.collapseActionView(); //this will collapse your search view
    }
    catch(Exception ex){
        ex.printStackTrace();
        System.out.println(ex);
    }
    return true;
}
};
<item android:id="@+id/action_search"
    android:icon="@android:drawable/ic_menu_search"
    android:title="Search"
    app:showAsAction="collapseActionView|ifRoom"
    android:orderInCategory="1"
    app:actionViewClass="android.support.v7.widget.SearchView"
    android:menuCategory="secondary"
    />
final  MenuItem miSearch = menu.findItem(R.id.action_search);
    SearchView searchView = (SearchView) miSearch.getActionView();
    searchView.setQueryHint("Searh For");
    searchView.setOnQueryTextListener(newSearchView.OnQueryTextListener() {
        @Override
        public boolean onQueryTextSubmit(String query) {
            Toast.makeText(context,query, Toast.LENGTH_LONG).show();
            // Here Put Your Code.
            //searchView.onActionViewCollapsed();
            miSearch.collapseActionView();
            return false;
        }

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