Как я могу запустить свою поисковую активность при нажатии на виджет панели поиска, а не при нажатии клавиши ввода?

У меня есть виджет панели поиска поверх представления карты, и мне бы хотелось, чтобы при нажатии на этот виджет представление карты заменялось представлением списка, которое динамически меняет отображаемые элементы при вводе запроса и сохраняет виджет панели поиска сверху. Затем, когда я нажимаю стрелку назад на виджете панели поиска, я возвращаюсь к просмотру карты. До сих пор я реализовал панель поиска в соответствии с руководством, и когда я нажимаю клавишу ввода, она запускает другое действие, содержащее мой список, но это не то, что мне нужно, поскольку виджет панели поиска исчезает.

Мой вопрос в том, есть ли способ сделать это с помощью виджета панели поиска, или я должен просто реализовать текст редактирования и изменить фрагмент при нажатии на текст редактирования?


person Bender Rodriguez    schedule 16.06.2015    source источник


Ответы (1)


У меня была та же проблема, и способ, которым я реализовал, заключается в том, что у меня есть обычный значок меню поиска в действии 1, и onClick открывает еще один ListViewActivity.

SearchManager searchManager =
            (SearchManager) getSystemService(Context.SEARCH_SERVICE);
    final MenuItem searchItem = menu.findItem(R.id.search);
    final SearchView searchView =
            (SearchView) searchItem.getActionView();
    searchView.setSearchableInfo(
            searchManager.getSearchableInfo(getComponentName()));

    searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
        @Override
        public boolean onQueryTextSubmit(String s) {
            // Some code here
            return false;
        }

        @Override
        public boolean onQueryTextChange(String s) {
            // Some code here
            return false;
        }
    });

    MenuItemCompat.setOnActionExpandListener(searchItem, new MenuItemCompat.OnActionExpandListener() {
        @Override
        public boolean onMenuItemActionExpand(MenuItem item) {
            // Some code here
            return true;
        }

        @Override
        public boolean onMenuItemActionCollapse(MenuItem item) {
            // Some code here
            return true;
        }
    });

    // Get the search close button
    ImageView closeButton = (ImageView) searchView.findViewById(R.id.search_close_btn);
    closeButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            // Some code here

            EditText et = (EditText) findViewById(R.id.search_src_text);
        }
    });

Вы можете переопределить текстовое представление внутри самого searchView, поэтому вам не нужно реализовывать собственный текст редактирования и кнопку закрытия и возврата.

person pratsJ    schedule 16.06.2015