SearchView, Botão Home e Mudança de Título na ActionBar Android

Investir em Você é Barra de Ouro a R$ 2,00. Cadastre-se e receba grátis conteúdos Android sem precedentes! Você receberá um email de confirmação. Somente depois de confirma-lo é que eu poderei lhe enviar os conteúdos semanais exclusivos. Os artigos em PDF são entregues somente para os inscritos na lista.

Email inválido.
Blog /Android /SearchView, Botão Home e Mudança de Título na ActionBar Android

SearchView, Botão Home e Mudança de Título na ActionBar Android

Vinícius Thiengo
(11052) (16)
Go-ahead
"O método consciente de tentativa e erro é mais bem-sucedido que o planejamento de um gênio isolado."
Peter Skillman
Prototipagem Android
Capa do curso Prototipagem Profissional de Aplicativos
TítuloAndroid: Prototipagem Profissional de Aplicativos
CategoriasAndroid, Design, Protótipo
AutorVinícius Thiengo
Vídeo aulas186
Tempo15 horas
ExercíciosSim
CertificadoSim
Acessar Curso
Quer aprender a programar para Android? Acesse abaixo o curso gratuito no Blog.
Lendo
TítuloAprenda Domain-driven Design: Alinhando Arquitetura de Software e Estratégia de Negócios
CategoriaEngenharia de Software
Autor(es)Vlad Khononov
EditoraAlta Books
Edição1ª
Ano2024
Páginas320
Conteúdo Exclusivo
Investir em Você é Barra de Ouro a R$ 2,00. Cadastre-se e receba gratuitamente conteúdos Android sem precedentes!
Email inválido

Opa! Blz?

Nesse vídeo dou continuidade a série de vídeos sobre ActionBar no Android apresentando como colocar a SearchView na ActionBar e como trabalhar a mudança de título (label) do ícone da ActionBar e como ativar a ação de volta a Activity principal da APP quando pressionamos a o Ícone Button da ActionBar que foi habilitado com o método setDisplayHomeAsUpEnabled() que também é da ActionBar. Note que não abordo o 100% do SearchView nesse vídeo, porém o que abordo é o que utilizo é o acho mais do que o suficiente, porém você terá de ver suas necessidades para então saber será ou não necessário entrar mais no core desse componente. Note que a implementação de volta a Activity principal não é possível apenas quando implementada para o botão home da ActionBar, até porque trabalhamos com Intent e Flags, que não têm dependencia nenhuma com a ActionBar. Fique atento ao uso do método setFlags() juntamente com a constante Intent.FLAG_ACTIVITY_CLEAR_TOP no momento de limparmos a pilha de Activities e então colocarmos apenas uma Activity.

Importante ressaltar que tanto o compontente SearchView quanto a implementação que limpa a pilha de activities são independentes da ActionBar e podem ser implementadas de outras formas também. Mas enfim, vou evitar mais delongas e deixar você assistir ao vídeos. Se você ainda não viu os outros vídeos da série, vá em "Recomendado" que os links dos posts desses vídeos estão todos lá.

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

Segue links de página apresentadas no vídeo:

Página do componente SearchView no site oficial do Android

Página do listener OnQueryTextListener no site oficial do Android

Vlw

Investir em Você é Barra de Ouro a R$ 2,00. Cadastre-se e receba grátis conteúdos Android sem precedentes!
Email inválido

Relacionado

Fragments no Android, Trabalhando com Múltiplas ActivitiesFragments no Android, Trabalhando com Múltiplas ActivitiesAndroid
Ciclo de Vida e Otimização de Fragments no AndroidCiclo de Vida e Otimização de Fragments no AndroidAndroid
Iniciando ActionBar no Android, Trabalhando Com MenuIniciando ActionBar no Android, Trabalhando Com MenuAndroid
Adicionando Tabs na ActionBar AndroidAdicionando Tabs na ActionBar AndroidAndroid

Compartilhar

Comentários Facebook

Comentários Blog (16)

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...
29/03/2017
Ola... Interessante a aula... tenho um projeto e preciso implementar nele um SearcVuew como este... porem meu projeto tem varios fragments tipo Tab1, Tab2, Tab3.....etc gostaria de acessar pelo SearcVuew a Tab20 eu Insiro titulo da tab e ja me direciona diretamente para ela...... SERIA POSSIVEL? TKS
Responder
Vinícius Thiengo (0) (0)
01/04/2017
Luciano, tudo bem?

É possível sim. Dê uma olhada em um conteúdo mais atual que tenho sobre o SearchView:

http://www.thiengo.com.br/buscas-com-searchview-e-searchrecentsuggestions-material-design-android-parte-13

Abraço.
Responder
13/07/2015
Opa Thiengo , Bom Dia!

Estou com um pequeno problema que ainda nao o conseguir arrumar .

no searchView , Quando Implemento as seguintes Linhas de Codigo

   getMenuInflater().inflate(R.menu.menu, menu);
        SearchView sv = (SearchView) menu.findItem(R.id.itemAlef).getActionView();
        sv.setOnQueryTextListener(new SearchFiltro());

Botao de pesquisa simplesmente resolveu não aparecer , poderia ser alguma otimização ? se for, qual seria ela?
Responder
Vinícius Thiengo (0) (0)
14/07/2015
Fala Alef Henrique, blz?
Faça o seguinte, utilize essa implementação (http://www.thiengo.com.br/buscas-com-searchview-e-searchrecentsuggestions-material-design-android-parte-13 ), ela já está com o Toolbar e é mais simples devido a utilização da Toolbar. O ActionBar está depreciado, provavelmente está utilizando uma entidade que logo não mais terá suporte nas versões mais atuais do Android. Abraço
Responder
Marlon Danilo (1) (0)
19/06/2015
Thiengo, bom dia!
Muito bom seu site, realmente muito bom.

Estou criando um searchview e pela classe funcionou belezinha, mas pelo xml dá erro. Sendo assim, gostaria de saber se tem como alterar o ícone padrão do searchview sem ser pelo xml.

Desde já agradeço, parabéns pelo trabalho!
Responder
Vinícius Thiengo (1) (0)
20/06/2015
Fala Marlon, blz?
A principio é somente via xml, pelo menos a maneira fácil, pois se não me engano é possível realizar todas as configurações feitas no xml, porém na Java API, mas ai é pesquisar mais ou ir pelo JavaDoc das classes tentando a implementação na mão sem tuto. Abraço
Responder
Ricardo (1) (0)
12/05/2015
Thiengo blz ?

o SearchView so busca quando preenhe o campo, quando esta null ou empty nao vai  , se eu quiser buscar todos os registros quando estiver null ou empty como poderia fazer?
Responder
Vinícius Thiengo (0) (0)
13/05/2015
Fala Ricardo, blz?
o setOnQueryTextListener(), mais precisamente no método onQueryTextChange() vc consegue verificar até mesmo quando não houver texto algum no SearchView, então por esse método vc pode colocar uma variavel de instancia para receber o valor da string de entrada. Ai vc implementa tb o listener setOnQueryTextFocusChangeListener(), mais precisamente no método onFocusChange() vc verificará quando o SerachView perde o Focus, ai junto com a variavel  de instancia que vc guardou o valor do SerachView no método onQueryTextChange() do listener setOnQueryTextListener() vc verifica se está vazio, se sim vc vai em sua base de dados e pega todos os dados necessários sem filtro algum. Ve se assim passa ai (aqui deu certo). Abraço
Responder
19/03/2015
Olá Thiengo, como faço pra fazer uma pesquisa numa listView custumizada?
Obrigado!
Responder
Vinícius Thiengo (0) (0)
20/03/2015
Fala Hemerson, blz? Bom, no SearchView temos a implementação do OnQueryTextListener em uma classe auxiliar para que seja possível enviar o texto da busca a base de dados para então trazermos o resultado da base de dados. Em seu caso vc terá uma lista que será preenchida de acordo com os critérios de sua APP (via servidor Web, via lista preparada, ...).  Essa lista será a entidade que servirá de base a uma outra lista, essa outra lista será a listaCópia, ou seja, ela terá uma cópia dos dados da lista original. A listaCopia será vinculada ao Adapter que será vinculado ao ListView de sua tela. Com o SearchView tendo uma implementação do OnQueryTextListener vinculada a ele, no método onQueryTextSubmit() da implementação de OnQueryTextListener vc fará uma pesquisa em sua lista original, no caso verificando o termo buscado pelo usuário com cada item de sua lista original. Porém antes de começar a verificação vc irá dar um clear() em sua listaCopia (não crie um uma nova instancia, vc perderá o poder do notifyDataSetChange() se fizer isso). Depois do clear() na listaCopia vc começa a verificação de cada item da list original, se o item bater com o termo buscado (pelo menos parte da palavra ou algumas palavras, esses critérios são definidos por vc) então vc add() esse item na listCopia. Quando finalizar a verificação vc pega o Adapter que tem a listaCopia vinculada a ele e então apenas chame o método notifyDataSetChange(), a listView será remontada com os novos valores.  Acredito que vc perde em fazer essa pesquisa dentro a lista do Java API, pois com um SQLite vc poderia utilizar o fts3 e ter uma busca com maior relevância e uma ordenação baseado na relevância, porém se for somente uma lista de contatos, não há necessidade de quebrar mt a cabeça com o SQLite (minha opinião). Então é isso. Abraço
Responder
21/03/2015
Valeu mesmo Thiengo, ajudou bastante.
Obrigado!
Responder
27/08/2014
Thiengo Calopsita parabéns pela página, tem como mudar a seta do setDisplayHomeAsUpEnabled?? ou deixar o icone como o link pra voltar?? Valeu parceiro um abraço
Responder
Vinícius Thiengo (0) (0)
27/08/2014
Fala Rick, blz?
Então, se não me engano somente nas versões 2.x é que não tem como mudar. Abraço
Responder
Cristiano Gomes (1) (0)
09/03/2014
Olá Thiengo, tudo bom?

Eu estou chegando agora no seu site e gostei muito das tutoriais sobre android, principalmente em relação a ActionBar/Tabs/Fragments.

Eu estou com uma duvida em relação a Tabs e Fragment .
Tenho uma Activity com ActionBar e três Tabs, cada uma com um Fragment, em cada Fragment tenho um formulário.
A minha duvida é saber como posso acessar os dados informados em cada Fragment/Formulario desse através da minha activity?
Obrigado!
Responder
Vinícius Thiengo (0) (0)
09/03/2014
Fala Criatiano, blz?
Então o que eu costumo fazer é colocar a declaração de minhas variaveis que terei acesso tanto na Activity quanto no Fragments na própria Activity, assim quando eu chamo algum fragment eu passo essas variaveis no construtor (vc pode criar um construtor para fragment sem problemas). Ai com variaveis do mesmo tipo dentro do fragment, eu inicializo elas referenciando as variaveis que foram passadas no construtor. Note que esse método somente funciona com objetos, pois a referência na memória é a mesma, assim sempre que houver alteração no fragment as variaveis da Activity tb sofrerão a alteração, deixando todos os dados atualizados. Como vc está trabalhando com Tabs, basta no momento em que as declara na Activity ... o exemplo abaixo explica um pouco melhor o que faço:

...
Tab tab = ab.newTab();
tab.setIcon(R.drawable.ab_activies_walks_01);
tab.setText(" Passeios ");
tab.setTabListener(new NavigationTabs(this, new WalksOpenFragment( variavel1, variavel2 )));
...

No caso acima o que quero é manter minhas variaveis "variavel1" e "variavel2" (que são objetos) atualizadas mesmo se a alteração vier dentro do fragment "WalksOpenFragment" (que é acionado pela Tab " Passeios "). Recomendo que coloque as declarações das variaveis diretamente na classe e não dentro de um método específico dentro da classe. Espero ter ajudado, abraço.
Responder
Cristiano Gomes (1) (0)
14/03/2014
Deu certo!
Muito obrigado!
Responder