【问题标题】:Android:Text in searchView disappears on Configuration ChangeAndroid:searchView中的文本在配置更改时消失
【发布时间】:2015-09-26 05:23:13
【问题描述】:

我在 searchView 中输入的文本会在配置更改时消失。
我已经在处理配置更改,但仍然无法正常工作。
由于我使用了片段,所以下面的代码写在片段中。
请解决我的问题。
我的问题是我无法在 onActivityCreated 方法中检索 savedInstance
以下是我的代码:
有用的代码片段

private String searchQuery="";

        @Override
        public void onActivityCreated(Bundle savedInstanceState) {
            super.onActivityCreated(savedInstanceState);
            if(savedInstanceState != null)
            searchQuery = savedInstanceState.getString(Tag.SEARCH_QUERY);
        }

          @Override
        public void onSaveInstanceState(Bundle outState) {
            super.onSaveInstanceState(outState);
            outState.putString(Tag.SEARCH_QUERY, searchQuery);

        }

 @Override
        public void onCreateOptionsMenu(Menu menu,MenuInflater menuInflater) {
            // Inflate the menu; this adds items to the action bar if it is present.
            menuInflater.inflate(R.menu.menu_search, menu);
            MenuItem menuItem = menu.findItem(R.id.action_search);
            SearchView searchView = null;
            if (menuItem != null)
                searchView = (SearchView) menuItem.getActionView();

            if (searchView != null) {
                searchView.setQuery(searchQuery,false);
                searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {

                    @Override
                    public boolean onQueryTextSubmit(String query) {
                        //searching is done in async task
                        searchQuery = query;
                        NetworkUtility.onProgressBarShow(getActivity());
                        MyAsyncTaskDownloadDetails myAsyncTaskDownloadDetails = new MyAsyncTaskDownloadDetails();
                        myAsyncTaskDownloadDetails.execute(new String[]{Tag.PLP_URL + query, Tag.PLP,""});
                        return true;
                    }


                    @Override
                    public boolean onQueryTextChange(String newText) {
                        return true;
                    }
                });
            }
            super.onCreateOptionsMenu(menu, menuInflater);
        }
    }

【问题讨论】:

    标签: android configuration


    【解决方案1】:

    首先您将 queryText 保存在 onQueryTextSubmit 回调中,这意味着 searchQuery 将保持为空,除非并且直到用户提交了搜索查询,所以请保留它记住。

    其次尝试以下代码。我已经测试过它会起作用。

    if(searchQuery.length()>0){
    
        //See this commented code
        //  if(Utils.hasIceCreamSandwich()) {
        //      searchMenuItem.expandActionView();
        //  }else {
        //      MenuItemCompat.expandActionView(searchMenuItem);
        //  }
    
        MenuItemCompat.expandActionView(menuItem);
        searchView.setQuery(searchQuery, false);
    }
    

    【讨论】:

    • 但我的问题是我无法在 onActivityCreated 方法中检索 savedInstance
    • 我在示例项目中复制/粘贴了您的代码,它对我有用。发布您的活动代码,可能是活动有问题
    猜你喜欢
    • 1970-01-01
    • 2019-03-10
    • 1970-01-01
    • 1970-01-01
    • 2015-11-23
    • 1970-01-01
    • 2017-11-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多