重置搜索窗口小部件(SearchView)值

Kyr*_*iog 24 android android-widget

我有2个活动:第一个,HomepageActiviy有一个搜索小部件,使用另一个活动搜索数据,SearchActivity.

我想要做的是当我回到SearchActiviyHomepageActivity,搜索小部件折叠并带有空文本.

我试图做以下事情:

public class HomepageActivity extends Activity {
    @TargetApi(11)
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        MenuInflater inflater = getMenuInflater();
        inflater.inflate(R.menu.projectslist, menu);

        if(Build.VERSION.SDK_INT >= 11) {
            SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE);
            SearchView searchView = (SearchView) menu.findItem(R.id.homepage_search).getActionView();
            ComponentName component = new ComponentName(this, SearchActivity.class);
            searchView.setSearchableInfo(searchManager.getSearchableInfo(component));
            searchView.setIconifiedByDefault(true);
            searchView.setQuery("", false);

        }

        return super.onCreateOptionsMenu(menu);
    }

    […]

    @TargetApi(11)
    @Override
    protected void onRestart() {
        super.onRestart();
        if(Build.VERSION.SDK_INT >= 11)
            invalidateOptionsMenu();
        launchAsynchronousImageDownload();
    }
}
Run Code Online (Sandbox Code Playgroud)

如果窗口小部件显示为已折叠,则窗口小部件中的文本仍会记住搜索到的文本(在重新打开窗口小部件后).如何重置小部件的文本?

谢谢你的帮助!;)

BJV*_*BJV 56

您也可以尝试以下方法:

searchView.setQuery("", false);
searchView.clearFocus();
Run Code Online (Sandbox Code Playgroud)


Cri*_*vez 27

这是神奇的

searchView.setQuery( "",假); //清除文字

searchView.setIconified(真); //关闭搜索编辑器并再次创建搜索图标

HomepageActivity中,在oncreate函数后插入onSaveInstanceState函数

每次打开新活动时,此功能都会触发, 在打开新活动之前,它将重置搜索窗口小部件的值

  protected void onSaveInstanceState(Bundle outState) {
        super.onSaveInstanceState(outState);
         searchView.setQuery("", false);
        searchView.setIconified(true);
    }
Run Code Online (Sandbox Code Playgroud)


小智 10

这对我有用:

首先,我在活动的顶部声明了菜单项变量:

private MenuItem mSearchMenuItem;
Run Code Online (Sandbox Code Playgroud)

我在OnCreateOptionsMenu()中定义了变量:

mSearchMenuItem = menu.findItem(R.id.action_search);
Run Code Online (Sandbox Code Playgroud)

我在onResume()中声明了invalidateOptionsMenu():

@Override
protected void onResume() {
    invalidateOptionsMenu();
    super.onResume();
}
Run Code Online (Sandbox Code Playgroud)

最后,我在onPrepareOptionsMenu()的菜单项上调用了collapseActionView().

@Override
public boolean onPrepareOptionsMenu(Menu menu) {
    mSearchMenuItem.collapseActionView();

    return super.onPrepareOptionsMenu(menu);
}
Run Code Online (Sandbox Code Playgroud)


Kyr*_*iog 0

刚刚找到了一种丑陋的方法来使其工作(阅读评论以查看差异):

\n\n
public class HomepageActivity extends Activity {\n    // Declaring SearchView as an instance object\n    private SearchView searchView;\n\n    @TargetApi(11)\n    @Override\n    public boolean onCreateOptionsMenu(Menu menu) {\n        MenuInflater inflater = getMenuInflater();\n        inflater.inflate(R.menu.projectslist, menu);\n\n        if(Build.VERSION.SDK_INT >= 11) {\n            SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE);\n            // Using instance var instead of local var\n            searchView = (SearchView) menu.findItem(R.id.homepage_search).getActionView();\n            ComponentName component = new ComponentName(this, SearchActivity.class);\n            searchView.setSearchableInfo(searchManager.getSearchableInfo(component));\n            searchView.setIconifiedByDefault(true);\n            // Setting query is not anymore required\n            //searchView.setQuery("", false);\n        }\n\n        return super.onCreateOptionsMenu(menu);\n    }\n\n    [\xe2\x80\xa6]\n\n    @TargetApi(11)\n    @Override\n    protected void onRestart() {\n        super.onRestart();\n        // Do not need to recreate menu\n        /*if(Build.VERSION.SDK_INT >= 11)\n            invalidateOptionsMenu();*/\n        if(Build.VERSION.SDK_INT >= 11) {\n            // Calling twice: first empty text field, second iconify the view\n            searchView.setIconified(true);\n            searchView.setIconified(true);\n        }\n        launchAsynchronousImageDownload();\n    }\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

我认为这很丑陋,所以如果有人有更好的主意,请告诉我:)

\n