如何防止SearchView自动清除搜索到的文本

时间:2014-09-10 08:22:52

标签: android android-actionbar searchview

正常行为:

  • 当我在SearchView上的ActionBar小部件中请求搜索之后 单击软键盘的搜索操作按钮,输入文本为 已从SearchView清除。

我想要的行为:

  • 当我执行搜索时,我希望输入文字保持相同。怎么可能?

我已阅读SearchView的官方文档,以及herehere的指南,但没有运气。

编辑: 我发现只要我滚动ViewPager就会发生这种文本重置。

2 个答案:

答案 0 :(得分:2)

试试这个:

  mSearchView.setOnQueryTextListener(new SearchView.OnQueryTextListener()
    {
        @Override
        public boolean onQueryTextSubmit(String query)
        {
            mSearchView.setQuery(query,false);
            return false;
        }

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

答案 1 :(得分:0)

如果您的搜索小部件调用另一个活动来处理查询,它将被清除,因为活动是新创建的。

因此,您需要从2个位置手动设置查询:

  • onCreateOptionsMenu初始化搜索小部件
  • onNewIntent您收到查询的地方

为什么来自2个地方?因为如果新创建了搜索处理活动,则首先调用onNewIntent,并且尚未准备好使用搜索窗口小部件。在这种情况下,请在onNewIntent保存查询并将其设置为onCreateOptionsMenu。否则,可以直接设置为onNewIntent

以下是一个例子:

private String mQuery;
private SearchView mSearchView;

@Override
protected void onNewIntent(Intent intent) {
    super.onNewIntent(intent);
    mQuery = intent.getStringExtra(SearchManager.QUERY);
    if (mSearchView != null) {
        mSearchView.setQuery(mQuery, false);
    }
    // Do something with the new query
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the actionbar items
    getMenuInflater().inflate(R.menu.actionbar_items, menu);

    // Get SearchView and set the searchable configuration
    SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE);
    mSearchView = (SearchView) menu.findItem(R.id.action_search).getActionView();
    mSearchView.setSearchableInfo(searchManager.getSearchableInfo(getComponentName()));

    // Disable collapsing the search widget
    mSearchView.setIconifiedByDefault(false);
    // Set the query
    mSearchView.setQuery(mQuery, false);

    return true;
}