Buscas Com SearchView e SearchRecentSuggestions. Material Design Android - Parte 13

Receba em primeira mão, e com prioridade, os conteúdos Android exclusivos do Blog. Você receberá um email de confirmação. Somente depois de confirma-lo é que poderei lhe enviar os conteúdos exclusivos.

Email inválido.
Blog /Android /Buscas Com SearchView e SearchRecentSuggestions. Material Design Android - Parte 13

Buscas Com SearchView e SearchRecentSuggestions. Material Design Android - Parte 13

Vinícius Thiengo
(9776) (57) (2)
Go-ahead
"Concentre todos seus pensamentos no trabalho que tem em mãos. Os raios solares não queimam até que sejam colocados em foco."
Alexander Graham Bell
Kotlin Android
Capa do livro Desenvolvedor Kotlin Android - Bibliotecas para o dia a dia
TítuloDesenvolvedor Kotlin Android - Bibliotecas para o dia a dia
CategoriasAndroid, Kotlin
AutorVinícius Thiengo
Edição
Capítulos19
Páginas1035
Acessar Livro
Treinamento Oficial
Android: Prototipagem Profissional de Aplicativos
CursoAndroid: Prototipagem Profissional de Aplicativos
CategoriaAndroid
InstrutorVinícius Thiengo
NívelTodos os níveis
Vídeo aulas186
PlataformaUdemy
Acessar Curso
Receitas Android
Capa do livro Receitas Para Desenvolvedores Android
TítuloReceitas Para Desenvolvedores Android
CategoriaDesenvolvimento Android
AutorVinícius Thiengo
Edição
Ano2017
Capítulos20
Páginas936
Acessar Livro
Código Limpo
Capa do livro Refatorando Para Programas Limpos
TítuloRefatorando Para Programas Limpos
CategoriaEngenharia de Software
AutorVinícius Thiengo
Edição
Ano2017
Capítulos46
Páginas599
Acessar Livro
Quer aprender a programar para Android? Acesse abaixo o curso gratuito no Blog.
Conteúdo Exclusivo
Receba em primeira mão, e com prioridade, os conteúdos Android exclusivos do Blog.
Email inválido

Opa, blz?

Nesse vídeo dou continuidade a série de vídeos sobre o Material Design no Android, dessa vez abordando o SearchView junto a um SearchRecentSuggestionProvider. O SearchView é a interface que o usuário da APP tem para entrar com a busca desejada, essa interface é configurada por um arquivo xml, searchable.xml, que temos de definir dentro do folder /res/xml/. Esse arquivo searchable.xml vai permitir que o Android instancie uma entidade SearchableInfo, entidade na qual todas as Acivities que vão permitir que uma busca seja realizada devem utilizar, enfatizo isso, pois na documentação dá a entender que somente no Searchable Activity é que devemos utilizar essa SearchableInfo. O Searchable Activity é outra entidade que devemos implementar, nela será apresentado o resultado da busca. Se sua APP realizar a busca local em um SQLite ou em uma lista (esse último como no vídeo), então o processamento da busca também será no SearchableActivity. 

Note a utilização do atributo launchMode igual a singleTop para evitar que tenhamos mais de uma SearchableActivity no topo da pilha de Activities, essa definição é importante para que não se crie várias Searchable Activities no topo da pilha se o usuário realizar buscas dentro da Searchable Activity. Consequentemente com o uso do singleTop temos de utilizar também o método onNewIntent() para alterarmos o Intent qual na Searchable Activity. Com o Searchable Activity configurado e definidas no AndroidManifest.xml as Activities que poderão realizar a busca na interface de search, somente nos resta implementar um SearchRecentSuggestProvider que permitirá que nossa APP sugira buscas recentes ao usuário que está entrando com dados no SearchView. Note que mesmo não sendo abordado no vídeo (passei batido sem perceber) é possível enviar mais do que apenas a String de busca na Intent, sobreescrevendo o método startActivity() como abaixo, podemos enviar mais dados:

 

@Override

    public void startActivity(Intent intent) {

        if( Intent.ACTION_SEARCH.equalsIgnoreCase( intent.getAction() ) ){

            intent.putExtra("latitude", 20.56f); // EXEMPLO LATITUDE

            intent.putExtra("longitude", 20.13f); // EXEMPLO LONGITUDE

        }

        super.startActivity(intent);

    }

 

E então obtendo no Searchable Activity como no código abaixo:

 

Log.i("LOG", "Lat: "+intent.getFloatExtra("latitude", 0));

Log.i("LOG", "Lgd: "+intent.getFloatExtra("longitude", 0));

 

No mais o vídeo é mais completo que esse texto, incluindo código para limpar o histórico do usuário na cache de buscas recentes (algoritmo recomendado na documentação do Search no Android). 

Obs. : a parte de busca de dados e filtro deles na base local ou remota é de responsabilidade de seus scripts, pois as entidades de Search muito oferecem apenas a Interface e comunicação com a entidade que realizará o processamento dos dados.

O link para download do projeto se encontra logo abaixo no post.

Segue link do vídeo sobre ContentProvider disponível no Blog:

ContentProvider no Android, Entendendo e Utilizando

Segue links das páginas apresentadas no vídeo:

Página da classe SearchView no Android

Página da classe SearchRecentSuggestionsProvider no Android

Página de tutorial de implementação do Search feature no Android

Página do tutorial de RecentQueriesSuggetion no SearchView Android

Página do arquivo de  configuração Searchable.xml

Vlw

Receba em primeira mão, e com prioridade, os conteúdos Android exclusivos do Blog.
Email inválido

Relacionado

SwipeRefreshLayout e Snackbar, Material Design Android - Parte 9SwipeRefreshLayout e Snackbar, Material Design Android - Parte 9Android
Utilizando Transitions, Material Design Android - Parte 10Utilizando Transitions, Material Design Android - Parte 10Android
Design Support Library e CollapsingToolbarLayout, Material Design Android - Parte 11Design Support Library e CollapsingToolbarLayout, Material Design Android - Parte 11Android
Lib Fresco Para Carregamento de Imagens (com GIFs e WebPs Animados). Material Design Android - Parte 12Lib Fresco Para Carregamento de Imagens (com GIFs e WebPs Animados). Material Design Android - Parte 12Android

Compartilhar

Comentários Facebook

Comentários Blog (57)

Para código / script, coloque entre [code] e [/code] para receber marcação especifica.
Forneça seu nome válido.
Forneça seu email válido.
Forneça o comentário.
Enviando, aguarde...
Valdir (1) (0)
24/03/2018
Thiengo, boa noite!
Primeiro parabéns pelo blog.
Preciso da tua ajuda, sou iniciante na área e estou precisando implementar uma ferramenta de busca que consegue localizar palavras dentro de um pdf que esta no PdfView. O APP que estou criando é uma ferramenta onde possui legislações em pdf. Consegui implementar a ferramenta de busca (uma lupa que aparece no menu), mas não consigo fazer com que ela leia o arquivo pdf.

O código esta assim:

public class AnexoIAActivity extends AppCompatActivity
        implements SearchView.OnQueryTextListener{

    PDFView pdfView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_anexo_ia);

        pdfView = (PDFView) findViewById(R.id.pdfView);
        pdfView.fromAsset("Anexo I.pdf").load();
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.menu_search, menu);

        MenuItem searchItem = menu.findItem(R.id.search);
        SearchView searchView = (SearchView) MenuItemCompat.getActionView(searchItem);
        searchView.setOnQueryTextListener(this);

        return true;
    }

    @Override
    public boolean onQueryTextSubmit(String query) {
        // User pressed the search button
        return false;
    }

    @Override
    public boolean onQueryTextChange(String newText) {
        // User changed the text
        return false;
    }
}


O menu SearchView é este:

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android "
    xmlns:app="http://schemas.android.com/apk/res-auto ">
    <item android:id="@+id/search"
        android:title="@string/hint_search"
        android:icon="@android:drawable/ic_menu_search"
        app:showAsAction="collapseActionView|ifRoom"
        app:actionViewClass="android.support.v7.widget.SearchView" />
</menu>


Me ajuda aí. O que devo fazer para que o meu APP faça leitura dentro do aplicativo fornecendo as informações pesquisadas?
Responder
Vinícius Thiengo (0) (0)
25/03/2018
Valdir, tudo bem?

Primeiro é importante saber que o SearchView é somente uma interface que facilita a colocação do componente de busca no aplicativo, ou seja, ele é independente de onde ocorrerá a busca e como esta será apresentada.

Aparentemente o seu código com o SearchView está ok, somente confirme para mim se depois do envio do search, por parte do usuário, se o método onQueryTextSubmit() está sendo invocado.

Busquei por alguma API que permita o search de maneira trivial em PDF a partir dela, porém ainda não encontrei e por mais incrível que pareça, as APIs PDF pagas são realmente caras e em dólar.

A seguir o link com todas as APIs de leitura / escrita de PDF que encontrei para o Android: https://android-arsenal.com/tag/72?sort=rating

Uma opção é utilizar as APIs nativas do Android para trabalho com PDF, assim pode ser que seja possível aplicar search em qualquer PDF. A seguir os links destas APIs:

https://developer.android.com/reference/android/graphics/pdf/PdfDocument.html

https://developer.android.com/reference/android/graphics/pdf/PdfRenderer.html

Abraço.
Responder
Valdir (1) (0)
25/03/2018
Olá, Thiengo!
Sim, o método onQueryTextSubmit() está sendo invocado (implementei uma ação dentro do método onQueryTextSubmit() e ao pressionar a lupa de pesquisa ele executou a ação e abriu uma Activity). Apesar da sua ajuda, sinceramente não sei o que fazer, nem mesmo como começar.
Responder
Vinícius Thiengo (0) (0)
25/03/2018
Valdir, ao menos estude a documentação das APIs gratuitas do link a seguir:

-> https://android-arsenal.com/tag/72?sort=rating

Estude todas as APIs, pois pode ser que alguma delas permita a busca via interface pública.

Na pior das hipóteses você terá de realizar o investimento em alguma API paga, isso se ela não tiver versão free.

As APIs pagas estão também presentes no link compartilhado acima.

Abraço.
Responder
Valdir (1) (0)
09/04/2018
Thiengo, boa tarde!

Recebi esta resposta de um outro site no seguinte link:
https://stackoverflow.com/questions/28062649/is-there-any-way-to-search-a-text-in-pdf-file-in-android/28062799#28062799

Contudo, não compreendi. Tenho como você me ajudar?
Responder
Vinícius Thiengo (0) (0)
13/04/2018
Valdir, tudo bem?

O que está sendo informado é que você deve checar os seguintes links:

-> https://stackoverflow.com/questions/17296236/how-to-open-pdf-file-using-itext-in-android/17296551#17296551

-> https://stackoverflow.com/questions/18098400/how-to-get-raw-text-from-pdf-file-using-java/18098506#18098506

Para saber como utilizar a API IText para abrir um arquivo PDF, ler todo o conteúdo dele e assim conseguir aplicar buscas neste conteúdo.

-> Link da API IText: https://itextpdf.com/

O IText é pago, mas você pode utiliza-lo até 30 dias de maneira gratuita para avalia-lo antes do investimento.

Dependendo de seu domínio do problema, digo, do domínio do aplicativo, e assumindo que o IText conseguiu resolver o seu problema de busca de dados em PDF, vale a pena estudar a possiblidade de adquirir uma licença.

Continuando com as dicas da resposta que lhe indicaram...

Depois é solicitado que você veja o tutorial do link a seguir para saber como buscar uma String:

-> http://www.tutorialspoint.com/javaexamples/string_search.htm

Também é informado para estudar o tutorial do link a seguir para saber como realizar uma busca utilizando a Interface TextExtractionStrategy:

-> https://stackoverflow.com/questions/12938397/searching-words-in-pdf-and-extracting-it-using-itext-in-android/12938796#12938796

Valdir, veja se com essa interpretação você consegui construir essa funcionalidade de busca em PDF em seu aplicativo Android.

Abraço.
Responder
Elias Saraiva (1) (0)
22/01/2018
Boa tarde Thiengo,
Estou tentando implementar um SearchView em uma ListView num projeto (Projeto de uso pessoal ? Código que peguei na internet), segui alguns exemplos e dicas mas sem suscesso. Sempre ocorre erro ou não retorna nada na pesquisa. Por isso venho perguntar se o você pode me ajudar a montar a pesquisa pois não tenho muita experiência.

Desde já agradeço.
Responder
Vinícius Thiengo (0) (0)
25/01/2018
Elias, tudo bem?

Primeiro é importante saber que ambos os componentes, SearchView e ListView, são independentes. Ou seja, primeiro estude o trabalho com o SearchView, todas as entidades envolvidas (searchable.xml e SearchActivity, por exemplo) depois destrinche o trabalho com o ListView (adapter e cia).

Ao fim dos estudos você perceberá que a vinculação de um a outro se resume em:

-> Obter o termo informado em busca no SearchView;
-> Utilizar o termo na base de dados (local ou remota);
-> Obter os resultados da base, mesmo que vazio;
-> Colocar os resultados na lista de dados vinculada ao adaptar do ListView.

Já tentou seguindo o roteiro acima? Se sim e deu erro, coloque aqui a pilha completa do erro gerado.

Para obter a pilha de erros você terá de saber trabalhar com o LogCat, a seguir alguns links que lhe ajudarão com isso:

-> Gravar e visualizar registros com o Logcat: https://developer.android.com/studio/debug/am-logcat.html?hl=pt-br

-> Entendendo e Utilizando o a Classe Log Com o LogCat no Android: https://www.thiengo.com.br/entendendo-e-utilizando-o-a-classe-log-com-o-logcat-no-android

A seguir deixo alguns links aqui do Blog para um estudo mais aprofundado sobre o ListView:

-> ListView: Entendendo e Utilizando no Android: https://www.thiengo.com.br/listview-entendendo-e-utilizando-no-android

-> Utilizando BaseAdapter Para Personalização Completa da ListView: https://www.thiengo.com.br/utilizando-baseadapter-para-personalizacao-completa-da-listview

-> Carregando Dados no ListView Com OnScrollListener e Volley no Android: https://www.thiengo.com.br/carregando-dados-no-listview-com-onscrolllistener-e-volley-no-android

Abraço.
Responder
Weldon Rafael (1) (0)
20/07/2017
boa noite Thiengo, esta acontecendo um problema no meu app, quando eu digito o nome do carro e coloco pra pesquisar ele me retorna a lista normalmente, mas ao selecionar algum item ocorre um erro e o app fecha.
você poderia mim ajudar nesse problema?
Responder
Vinícius Thiengo (0) (0)
21/07/2017
Weldon, tudo bem?

Assim que o aplicativo fecha algo é apresentado nos logs do Android Studio. Coloque aqui a mensagem de erro que é apresentado lá.

Assim será possível debugar e encontrar uma possível solução.

Caso não conheça os logs do Android Studio, dê uma olhada no link a seguir da documentação (em português): https://developer.android.com/studio/debug/am-logcat.html?hl=pt-br

Abraço.
Responder
22/05/2017
Fala Thiengo blz?
Estou finalizando um app que trabalha com o Firebase Database, ele somente puxa os dados e mostra a lista em uma RecyclerView, gostaria de implementar a SearchView, mas até agora não consegui, pesquisei na StackOverflow e achei esse exemplo https://stackoverflow.com/questions/42329436/firebase-android-searchview-by-values mas não sei como implementar ou se está certo.
Tem alguma sugestão? Desde já obrigado e parabéns pelos seus videos!
Responder
Vinícius Thiengo (0) (0)
24/05/2017
Lucas, tudo bem aqui.

A princípio não tem problemas com o código da resposta fornecida.

O que você tem de ter em mente é que quando se falando de base NoSQL (Firebase Database é uma) as buscas não têm um JOIN ou algo similar como temos em bases SQL.

A base NoSQL deve ser construída de acordo com as áreas que mais serão requisitadas, por exemplo: os objetos que estarão como resultados das buscas, esses podem ser persistidos por completo, para que novas requisições ao Firebase Database não sejam necessárias, algo que faria a resposta ao usuário ser lenta.

O código apresentado, na resposta que comentou, está correto, mas os termos de busca e de verificação, ?Username" e "Mike", incluindo o método equalTo(), para esses você terá de utilizar na verdade os que se encaixam na estrutura de sua base.

Ainda não tenho conteúdos falando sobre bases NoSQL, pretendo construí-los o quanto antes, mas por enquanto o que faço é indicar alguns que conheço. Como os livros a seguir:

http://www.novatec.com.br/livros/nosql-essencial/
https://www.casadocodigo.com.br/products/livro-nosql

Abraço.
Responder
Aurimar Junior (1) (0)
23/04/2017
Fale Thiengo, suas aulas tem me ajudado bastante, porém estou com uma dificuldade. Tenho um botão para pesquisa e ao lado tem um botão de mapa, mas eu gostaria que o botão de mapa desaparecesse quando o de pesquisa fosse acionado. Como eu poderia resolver este problema?
Responder
Vinícius Thiengo (0) (0)
27/04/2017
Aurimar, tudo bem?

Ainda não tentei um código assim, mas encontrei um dev com uma dúvida similar a sua onde o algoritmo de solução (escondendo o menu - onde fica seu map button) está no seguinte link: http://stackoverflow.com/a/30577820/2578331

Ve se ele se encaixa em seu caso. Abraço.
Responder
EDUARDO SILVA (1) (0)
30/11/2016
Fala Thiengo blz?
preciso de uma ajuda, estou desenvolvendo um app de vendas e uso o RecyclerView para exibir os itens que tenho em minha tabela do banco de dados, em cada linha tenho um editText que coloco a quantidade do item que eu quero colocar no pedido. como faço para enviar para outra activity somente os itens que possuem quantidade?
Responder
Vinícius Thiengo (0) (0)
01/12/2016
Eduardo, tudo bem aqui.

Para cada EditText você pode colocar vinculado a eles um listener de digitação, TextWatcher:

editText.addTextChangedListener(new TextWatcher() {
        @Override
        public void onTextChanged(CharSequence s, int start, int before, int count) {

           list.get( getAdapterPosition() ).setQuantidade( Integer.parseInt( s ) );
        }

        @Override
        public void beforeTextChanged(CharSequence s, int start, int count, int after) {}

        @Override
        public void afterTextChanged(Editable s) {}
    });

Seu código ficará similar ao código acima, terá de alterar ainda algumas coisas para se ajustar a sua lógica de negócio.

Note que terá de atualizar o objeto referente ao item que está sendo atualizado na tela pelo usuário.

Essa lista de objetos é criada fora do RecyclerView, como uma variável de instância da classe que contém o RecyclerView (caso ela não seja uma variável de instância em seu projeto, faça com que se torne).

Com isso, sendo variável de instância, no listener que provoca o envio de dados para a outra Activity, você pode, antes, passar a lista em um método que retorna uma nova lista, somente com os objetos que tiveram quantidades definidas.

E então, com a classe dos objetos da lista implementando o Parcelable, você pode facilmente enviar toda a nova lista para a outra Activity por meio de uma Intent.

Caso não conheça o Parcelable, veja o artigo / vídeo do link abaixo:

http://www.thiengo.com.br/parcelable-no-android-entendendo-e-utilizando

Com essa lógica de negócio é possível realizar o que quer.

Uma outra opção é utilizando o EventBus ao invés do Intent. Veja o artigo vídeo do link abaixo:

http://www.thiengo.com.br/eventbus-lib-comunicacao-entre-entidades-android

Para todos os artigos que indiquei aqui, não deixe de ler os comentários neles. Abraço.
Responder
11/05/2016
Boa tarde Thiengo, cara teus videos me ajudam muito, tenho apenas uma dúvida que é que quando o search view estiver vazio ele precisa mostrar a lista completa novamente, pode me explicar como fazer isso por favor?
Responder
Vinícius Thiengo (0) (0)
14/05/2016
Fala Guilherme, blz?
Achei algumas soluções na Internet utilizando o OnQueryTextListener. veja os links e se funciona para ti. Abraço

http://stackoverflow.com/a/34474333/2578331

http://www.scriptscoop2.com/t/b55dc4d0faab/java-android-searchview-empty-string.html
Responder
Matheus Bed (1) (0)
08/02/2016
Ei boa tarde,esta acontecendo um problema no meu app, quando eu digito o nome do carro e coloco pra pesquisar ele não aciona a SearchableActivity.
E ai voce poderia mim ajudar nesse problema ? obrigado pelos videos
Responder
Vinícius Thiengo (0) (0)
09/02/2016
Fala Matheus, blz?
Primeia coisa, veja se no LogCat (http://www.thiengo.com.br/entendendo-e-utilizando-o-a-classe-log-com-o-logcat-no-android ) se é printada alguma mensagem de Warning ou algo parecido indicando algo errado em sua configuração de searchable.

Se nada for printado no LogCat, então reveja toda a configuração do Exemplo, incluindo código no GitHub (https://github.com/viniciusthiengo/tc-material-design ) e tente novamente. Tente rodar o exemplo em sua máquina tb. Se nada ainda, volte ae. Abraço
Responder
Thiago (2) (0)
14/12/2015
Fala Thiengo, beleza?

Cara, tem algum material onde mostra como implementar autocomplete no searchview?
Responder
Vinícius Thiengo (0) (0)
16/12/2015
Thiago, blz?
Se não me engano abordo isso no vídeo acima tb... de qualquer forma, veja se esse antigo conteúdo ainda lhe ajuda (http://stackoverflow.com/a/11552094/2578331 ). Abraço
Responder
Danilo (1) (0)
24/11/2015
Bom Dia , Thiengo. Precisaria implementar um searchable activity para buscar em duas tabelas diferentes. Tenho dois fragments com informações de ocorrências aéreas e outro com relatórios finais de investigacao. Queria fazer com que o usuário buscasse os dois tipos de informações. Seria mais prático fazer uma busca para trazer informações de ambos ou teria como buscar a informação no web service de acordo com o tipo de fragment(ocorrencia ou investigacao) que ele está acessando? Valeu.
Responder
Vinícius Thiengo (0) (0)
29/11/2015
Fala Danilo, blz?
Vejo a segunda opção sendo a melhor, pois até mesmo evitaria o user de se confundi caso queira tb apresentar os resultados juntos. Utilize uma base local tb, para armazenar os resultados e permitir trabalhar tb offline. Abraço
Responder
Ismael Junior (1) (0)
08/11/2015
Fala Thiago blz?

Fiz uma searchable activity e está funcionando normal, onde ao retornar os dados na searchable eu posso clicar em um item da Recycler View e ele abre uma nova activity para a digitação de valores de produtos. Só que gostaria que, ao finalizar a digitação do item (aquela que é abertra após o clique no recycler view da searchable), gostaria que estes valores sejam enviados para a activity principal (a que possui o search manager).

Você já fez algo como isso?

Obrigado,

Abraço,
Responder
Vinícius Thiengo (0) (0)
28/11/2015
Fala Ismael, blz?
Uma maneira de solucionar isso é salvar, na Activity aberta, os dados no SharedPreferences (http://www.thiengo.com.br/sharedpreferences-no-android-entendendo-e-utilizando ), por exemplo, e então consultar esse Shared na Activity principal para saber se ou não dados.

Outra forma é utilizar o EventBus (http://www.thiengo.com.br/eventbus-lib-comunicacao-entre-entidades-android ) para trafegar os dados, a vantagem é que não se resume somente em dados primitivos, pode utilizar objetos no envio tb. Abraço
Responder
26/10/2015
Estava com problema no SearchView não chamava a SearchActivity. Encontrei o problema, no xml "searchable.xml" na propriedade label "android:label" é necessário referenciar ("android:label:"@string/app_name") e não setar na mão (ex: android:label="appteste"). Pois quando estava dando erro eu estava setando o label na mão!!!!
Espero ajudar,
Att.
Responder
Ismael Junior (1) (0)
21/10/2015
Fala Thiengo, como vai?

Fiz a implementação do SearchView em minha aplicação e funcionou certinho. Porém agora tenho uma dúvida. Eu precisaria de dois tipos diferentes de SearchView, pois um faria a pesquisa de produtos e outro a pesquisa de clientes. Neste caso eu posso criar duas SearchableActivity? Mas nesse caso como ficaria lá no androidManifest?
Responder
Vinícius Thiengo (0) (0)
24/10/2015
Fala Ismael, td tranquilo.
Já tentou colocar configurações similares para uma segunda SearchableActivity? O que recomendo é dar uma opção de busca avançada para o user onde ele abriria uma dialog e então informaria se a busca era para ser realizada em cima dos dados de produtos ou de users, no caso o SearchableActivity e toda a configuração ainda seria a mesma, porém teria uma flag a mais sendo enviada além de somente o texto de busca, essa flag informaria ao seu script se é para realizar a busca na base de produtos ou na base de users. O problema pode ser onde colocar esse button de busca avançada. Outra opção é utilizar o mesmo script comentado acima, com flag, porém deixar o user abrir uma Activity que vai setar essa flag para busca em produtos ou a outra Activity setando a flag para busca em users, dessa forma é ainda mais fácil e sem o dialog. Outra (e ultima) opção é realizar a busca em produtos e users e apresentar nas primeiras posições os resultados mais relevantes de acordo com sua busca na base de dados. Abraço
Responder
Ismael Junior (1) (0)
26/10/2015
Fala Thiengo

Obrigado pelo retorno. Consegui fazer funcionar configurando duas SearchableActivity, como você mencionou. Aí no manifest em cada declaração da activity, eu seto qual será a searchable default.

Desta forma funcionou legal.

Grande abraço,
Responder
02/10/2015
Hi
If you want in the searchableActivity, in part onClickListener, my bet was that if models equal camaro, go to an activity and if it was equal gallardo other activity going, what do I do?
Responder
Vinícius Thiengo (0) (0)
03/10/2015
Hi Ghafoori, what's up?
Actually the most common way is to use just one Activity, in problems like yours. What we need to realize is that both of mentioned itens in your comment are of type Car, so what we are supposed to get are only different values of the same stuff, like: model, brand, engine and so on. In that way we do not need a different Activity for each car. But if it is a needed in your Android project, what I recommend you are to use Polymorphism, because in that way you can avoid a bunch of if...else or switch...case. You can create a parent class that has a method that call an specific Activity, so all children classes can just override that method and call their own Activity. Have a good one. Talk soon
Responder
Ruan Alves (1) (0)
01/10/2015
Bom dia Blz? Queria saber como faço para quando o usuário ir digitando já ir buscando as informações, tipo o whats .... obrigado!
Responder
Vinícius Thiengo (0) (0)
03/10/2015
Fala Ruan, blz?
Vc pode utilizar o listener OnQueryTextListener do SearchView, como no exemplo abaixo:

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

            @Override
            public boolean onQueryTextChange(String newText) {
                Log.i("LOG", "-> " + newText);
                return false;
            }
        });

Note que pode seta-lo exatamente onde iniciou o SearchView, no método onCreateOptionsMenu() da Activity. Depois pode realizar a busca online em sua base remota para então apresentar o resultado no RecyclerView ou pode já utilizar o conteúdo salvo local no SQLite. essa ultima opção é provavelmente a melhor caso vc não tenha um servidor Web parrudo para responder sem mt delay. Abraço
Responder
Massi Pepo (1) (0)
07/08/2015
I want to open an activity created by search. Can you give me an example?
Responder
30/07/2015
Fala Thiengo, eu de novo. Só tenho a agradecer pelo conteúdo, sempre excelente. Implementei com sucesso no meu projeto a SearchView, funcionalmente está 100%. Estou personalizando ela, já consegui alterar a cor do texto do hint e do texto digitado pelo usuário, só que não consigo alterar a cor da back arrow, como eu faria isso? Tentei com exemplos do StackOverflow mas não consegui.

Obrigado
Responder
Vinícius Thiengo (0) (0)
31/07/2015
Fala James Ortiz, blz?
Veja se esse post lhe ajuda com isso (http://gregshackles.com/changing-the-android-toolbars-back-arrow-color/ ). Abraço
Responder
31/07/2015
Fala Thiengo, blz pura?
Tentei dessa maneira, mas sem sucesso. Acabei conseguindo seguindo essa aqui, vou deixar pra caso alguém também passe pelo mesmo problema:
Dentro do style.xml na personalização da Toolbar adicionei os 2 itens:

<code>
<item name="colorControlNormal">@color/material_black_54</item>
    <!-- this line is necessary for proper coloring on lollipop - do not delete it -->
    <item name="android:colorControlNormal" tools:ignore="NewApi">?attr/colorControlNormal</item>
</code>

E funcionou belezura.
Obrigado Thiengo, sucesso sempre!
Responder
Vinícius Thiengo (0) (0)
01/08/2015
Vlw James, abraço.
Responder
28/07/2015
Moço é seguinte, eu sei que você tem um blog e um canal que ensina coisas, mas eu ja procurei nas suas coisas inteiras e nao achei solução
Olha eu coloquei dominio personalizado e os compartilhamentos e comentarios que tinha sumiram, tanto os do G+ quanto os normais.. e nao sei como eu faço ninguem sabe nunca aconteceu isso com ninguem
Responder
Vinícius Thiengo (0) (0)
29/07/2015
Fala Nayara, blz?
O que acontece é que mudar a url faz a referencia para a vinculação de likes, comments, ... ser perdida (na verdade elas estão lá, seu site que não mais acessa as mesmas contagens devido a url distinta). Até onde sei não é possível mudar as referencias, seria até mesmo uma falha, pois burlar os likes e comments seria possível. Abraço
Responder
25/07/2015
Boa tarde.

Segue uma dica para quem necessitar executar uma rotina no clique do X do SearchView, uma vez que o campo não for vazio, basta implementar a rotina abaixo:

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

    @Override
    public boolean onQueryTextChange(String s) {
        if (s.equals("")) {
            //execute seu metodo aqui...
            return true;
        } else {
            return false;
        }
    }
});

Abraço!
Responder
09/07/2015
Caro Thiengo, Parabéns pelo vídeo !

Estou desenvolvendo um pequeno App de catálogo de produtos baseado no seu vídeo publicado a algum tempo, "Carregando Dados no ListView Com OnScrollListener e Volley no Android". Consegui implementar e adequar o exemplo utilizando já alguns itens do materal design, como RecyclerView e NavigationDrawer, mas para concluir meu App, preciso implementar a busca. Vc teria algum exemplo que poderia me ajudar a implementar o serchview adequado ao seu vídeo acima citado, como ele não utiliza fragments, onde seria incluídos os parâmetros de busca que iriam para o webservice e consequentemente a base mysql ? Mais uma vez, parabéns pelos vídeos !
Responder
Vinícius Thiengo (1) (0)
10/07/2015
Fala Luiz, blz?
Na verdade seu script de busca continuará na Activity, somente se ele estiver alterando de Toolbar quando altera de fragment é que vc terá de adaptar o código para isso, mas mt provavelmente seu script não está fazendo isso, está?

Seu script precisa de methods de menu que vão estar presentes somente na Activity e o Toolbar tende a ser um elemento único na Activity, mesmo com diferentes fragments rodando na Activity, porém em caso de nova Activity, novo Toolbar tb. O SearchView é apenas uma interface que permite seu script transferir dados de uma entidade a outra (as vezes a mesma entidade, como mostrado no vídeo) com um layout de busca, logo como os dados serão enviados para o servidor Web com uma base MySQL é uma implementação independente. Seu script pode pegar os dados enviados via Intent a Activity de busca (como apresentado no vídeo), abrir um ProgressBar e então com um Volley request enviar esses parametros para sua base remota para então receber os dados filtrados na Activity de busca e apresenta-los. Essa é a lógica que utilizo no APP do Blog, tenho tb um SQLite implementado, mas ai é algo opcional. O progressBar vc remove assim que s dados chegarem, mesmo que nada seja encontrado, nesse caso apresente uma mensagem em um TextView informando que não há resultados para a busca realizada. Veja se consegue implementar como dito acima. Note que mesmo no fragment seu script da Activity vai ainda funcionar, até mesmo no momento de captura o texto a ser utilizado na busca, seu script para pegar esse parametro primeiro via Intent e depois carregar o fragment. Abraço
Responder
Oliver (2) (0)
03/07/2015
Fala Thiengo blz?

Obrigado por responder.
O Search da App do Site roda em uma Activity?
Ela busca em banco de dados?

Parabens! Abraço
Responder
Vinícius Thiengo (0) (0)
03/07/2015
Fala Oliver, blz sim.
Roda sim na Activity, a busca é realizada na base de dados remota, porém se o APP estiver offline a busca é feita no SQLite utilizando a feature FS3 para busca no SQLite. Abraço
Responder
Oliver (1) (0)
01/07/2015
e possivel fazer essa busca em fragments?
Se sim, como seria? Pode me passar um exemplo?

Obrigado
Responder
Vinícius Thiengo (0) (0)
02/07/2015
Fala Oliver, blz?
A busca pode ser realizada em qualquer entidade, pois o SearchView é apenas a interface. Se quiser colocar a interface de busca no layout do Fragment, provavelmente é possível, porém o problema que vejo é como ouvir a requisição de busca sem o onCreateOptionsMenu() como auxilio. Mas enfim, esse algoritmo vejo como desnecessário, tendo em mente que o fragment deverá rodar dentro de uma Activity. Logo, realize a busca dentro do fragment se necessário, porém a interface permanece no layout da Activity. Abraço
Responder
henrique miller (1) (0)
29/06/2015
thiengo parabens pelas aulas, estou seguindo o seu projeto e atualizando o meu app para ficar de acordo com o material design, como está sendo usando o " <style name="Theme.MyTheme" parent="Theme.AppCompat.NoActionBar"> "
tenho uma tela onde tem tipo um cadastro e os EditText Spinners e outros widgets estão branco, como uso o fundo do branco no app. nao dá pra usar nesse style. tem algo que possa fazer pra mudar o estilo desse layout? desde já obrigado. e sucesso ^^
Responder
Vinícius Thiengo (0) (0)
30/06/2015
Fala Henrique, blz?
Vc tem as Views que não estão com o fundo branco devido ao Theme sendo utilizado, é isso? Coloque o android:background="#fff" em cada view tb. Na pior das hipóteses troque de Theme. Abraço
Responder
henrique miller (1) (0)
30/06/2015
coloquei o background #fff o problema é que os Widgets não aparecem pois estão em branco devido ao tema. com um fundo preto da pra ve-los, mas com o fundo branco nao da. tem como trocar o tema do layout todo ou de cada view, e como poderia fazer isso? e obrigado ai pelas respostas. vlw sucesso. ^^
Responder
Vinícius Thiengo (0) (0)
01/07/2015
Tem como sim Henrique, tente a primeira resposta dessa discussão no stackoverflow (http://stackoverflow.com/questions/27607463/how-to-change-theme-of-particular-view-in-android ). Utilize o atributo theme como na resposta. Éssa é apenas uma meneira, existem outras várias. Abraço
Responder
25/07/2015
Henrique, voce conseguiu resolver o seu problema ?
Estou com o mesmo problema, mas ocorrendo em APIs diferentes, por exemplo, na API 22 funciona perfeitamente, já na API 19 não funciona, porém na API 10, funciona tudo certinho também... Foram as APIs que testei... no caso tenho checkbox na tela... na API 19, ele nao aceita trocar a cor, sempre fica branco e o fundo da activity também é branco, e o link que o Thiengo passou para mim não funcionou. Vlw!
Responder
23/06/2015
Boa Noite Thiengo, você tem algum material ou video ensinando a imprimir dados para uma impressora em rede pelo android ?
Responder
Vinícius Thiengo (0) (0)
24/06/2015
Responder
24/06/2015
Obrigado.
Responder