Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/353.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/193.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
Java 重置搜索小部件(SearchView)值_Java_Android_Kotlin_Android Widget - Fatal编程技术网

Java 重置搜索小部件(SearchView)值

Java 重置搜索小部件(SearchView)值,java,android,kotlin,android-widget,Java,Android,Kotlin,Android Widget,我有两个活动:第一个,HomepageActiviy,有一个搜索小部件,可以使用另一个活动搜索数据,SearchActivity 我想做的是,当我从searchActivity返回到HomepageActivity时,搜索小部件会折叠并显示一个空文本 我试着做了以下几件事: public class HomepageActivity extends Activity { @TargetApi(11) @Override public boolean onCreateOpt

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

我想做的是,当我从
searchActivity
返回到
HomepageActivity
时,搜索小部件会折叠并显示一个空文本

我试着做了以下几件事:

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();
    }
}
如果小部件显示为折叠状态,小部件中的文本仍然记得搜索到的文本(在我重新打开小部件后)。 如何重置小部件的文本


谢谢你的帮助!;)

刚刚找到了一个丑陋的方法让它发挥作用(阅读评论以查看差异):


我认为这很难看,所以如果有人认为这是一个更好的主意,请告诉我:)

你也可以尝试以下方法:

searchView.setQuery("", false);
searchView.clearFocus();

我也有这个问题,如果我把它放在PrepareOptions功能表中,它就会起作用

@Override
public boolean onPrepareOptionsMenu (Menu menu) {
     SearchView searchView = (SearchView) menu.findItem(R.id.action_search).getActionView();
     searchView.setQuery("", false);
     // rest of code...
}
@Override
public boolean onPrepareOptionsMenu(Menu menu) {
    mSearchMenuItem.collapseActionView();

    return super.onPrepareOptionsMenu(menu);
}

这就是魔法

searchView.setQuery(“,false)//清除文本

  protected void onSaveInstanceState(Bundle outState) {
        super.onSaveInstanceState(outState);
         searchView.setQuery("", false);
        searchView.setIconified(true);
    }
searchView.setIconified(true)//关闭搜索编辑器并再次设置搜索图标

在主页活动中,在oncreate函数之后插入onSaveInstanceState函数

此函数将在每次打开新活动时触发, 在打开新活动之前,它将重置搜索小部件的值

  protected void onSaveInstanceState(Bundle outState) {
        super.onSaveInstanceState(outState);
         searchView.setQuery("", false);
        searchView.setIconified(true);
    }
这对我很有用:

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

private MenuItem mSearchMenuItem;
我在onCreateOptions菜单()中定义了变量:

我在onResume()中声明了InvalidateOptions菜单():

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

科特林 这是一个更干净的解决方案,它修复了以下问题:

searchView.setQuery("", false);
searchView.clearFocus();
  • 屏幕旋转后显示过滤列表的问题
  • 当用户切换到其他应用程序并返回时显示筛选列表的问题
  • 用户返回时搜索菜单向左移动的问题
  • 如果你是无效的,不需要图标化,它是自动完成的



    确保将
    YourActivity
    更改为包含片段的活动名称。

    hello@kyriog。。虽然我回答得太晚了。。但我也有同样的问题。在onRestart()方法中,我首先清空文本字段,然后将视图图标化。它解决了我的问题,无需调用setIconified()两次<代码>searchView.setQuery(“,false)
    searchView.setIconified(true)我在那里有混乱的searchView.SetIconnified(真)@TarekEl Mallah
    SetIconnified
    将视图缩小为图标。仅在尝试清除查询时,它既不是必需的,也不是缺少的。在我看来,它提供了最好的结果。将searchView设置为图标化并清除其焦点将使搜索图标向左移动,而不是像从未单击过一样将其完全清除。
    @Override
    protected void onResume() {
        invalidateOptionsMenu();
        super.onResume();
    }
    
    @Override
    public boolean onPrepareOptionsMenu(Menu menu) {
        mSearchMenuItem.collapseActionView();
    
        return super.onPrepareOptionsMenu(menu);
    }
    
    override fun onSaveInstanceState(outState: Bundle) {
        super.onSaveInstanceState(outState)
        searchView.setQuery("", false)
        (activity as YourActivity).invalidateOptionsMenu()
    }