1
resposta

SearchView parecido com Google Play Store

Olá pessoal tudo bem ? Estou com um probleminha vamos lá:

  1. Tenho um fragment, e neste fragment preciso de um tipo de SearchView, sendo que, esse SearchView não pode ficar em um menu, deve ficar exibido diretamente.

  2. Além disso esse SearchView deve fornecer sugestões de busca (baseado nas última buscas realizadas)

  3. Deve der possível também selecionar items da lista de sugestões e também via teclado digitando.

Pra resumir eu preciso de algo parecido com aquela barra de busca da Google Play Store (loja de aplicativos do android).

Tentei algumas soluções utilizando SearchView, AutocompleteTextView mas não obtive sucesso. Alguém conhece algo que consiga solucionar esse "probleminha" ?

Grato

1 resposta

https://github.com/MiguelCatalan/MaterialSearchView oi boa tarde, bom é esse seacheview que uso, e uso em fragment tenho 2 fragment uma chamado contato e o outro conversa entao se o usuario estiver no fragment contato a busca será automaticamente no contato, se tiver na conversa será na conversa. na activity mãe eu uso sim

 SeachView.setOnSearchViewListener(new MaterialSearchView.SearchViewListener() {
            @Override
            public void onSearchViewShown() {

            }

            @Override
            public void onSearchViewClosed() {
                ConversasFragment fragment = (ConversasFragment)  adapter.getPage(0);
                fragment.recarregarConversas();
            }
        });
        SeachView.setOnQueryTextListener(new MaterialSearchView.OnQueryTextListener() {
            @Override
            public boolean onQueryTextSubmit(String query) {
                return false;
            }

            @Override
            public boolean onQueryTextChange(String newText) {

              //Verificar  se esta pesquisando Conversa  ou contatos
                switch(viewPager.getCurrentItem()){
                    case 0:
                         ConversasFragment conversasFragment =(ConversasFragment) adapter.getPage(0);
                        if(newText!=null && !newText.isEmpty()){
                            conversasFragment.PesquisarConversa(newText.toLowerCase());
                        }else{
                            conversasFragment.recarregarConversas();
                        }
                        break;
                    case 1:
                        ContatosFragment contatosfragment = (ContatosFragment) adapter.getPage(1);
                        if(newText!=null && !newText.isEmpty()){
                            contatosfragment.PesquisarContatos(newText.toLowerCase());
                        }else{
                            contatosfragment.recarregarContatos();
                        }
                        break;

                }


                return true;
            }
        });

isso fica dentro do fragment Conversa

 public void PesquisarConversa(String texto) {

        List<Conversa> listaConversaBusca = new ArrayList<>();
        for (Conversa conversa : listaConversas) {

            if (conversa.getUsuarioExibicao() != null) {

                String nome = conversa.getUsuarioExibicao().getNome().toLowerCase();
                String ultimaMsg = conversa.getUltimaMensagem().toLowerCase();

                if (nome.contains(texto) || ultimaMsg.contains(texto)) {
                    listaConversaBusca.add(conversa);
                }
            } else {
                String nome = conversa.getGrupo().getNome().toLowerCase();
                String ultimaMsg = conversa.getUltimaMensagem().toLowerCase();

                if (nome.contains(texto) || ultimaMsg.contains(texto)) {

                }

            }
            adapter = new ConversasAdapter(listaConversaBusca, getActivity());
            recyclerViewConversas.setAdapter(adapter);
            adapter.notifyDataSetChanged();


        }
    }

esse dentro do fragment contato

 public void PesquisarContatos(String texto) {

        List<Usuario> listaContatosBusca = new ArrayList<>();
        for (Usuario usuario : listaContatos) {
           String nome=usuario.getNome().toLowerCase();
           if(nome.contains(texto)){
            listaContatosBusca.add(usuario);
           }

    }
            adapter = new ContatosAdapter(listaContatosBusca, getActivity());
           recyclerViewListaContatos.setAdapter(adapter);
            adapter.notifyDataSetChanged();
    }

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software