Alguém conhece um tutorial ou um exemplo de como implementar a interface de pesquisa padrão do Android com Fragment
s? Em outras palavras, é possível colocar uma pesquisa padrão com a SearchManager
em um fragmento?
java
android
sqlite
android-fragments
android-searchmanager
Cinto preto
fonte
fonte
Respostas:
Em suma, você não pode. Existem algumas razões pelas quais a criação de uma interface de pesquisa dentro de um
Fragment
não é possível.Ao criar uma interface pesquisável, você deve especificar uma "atividade pesquisável" padrão no manifesto do Android. Como eu tenho certeza que você sabe, a
Fragment
não pode existir sem um paiActivity
e, portanto, essa separação não é possível.Se você já descobriu o número 1, suponho que você fez essa pergunta na esperança de que exista algum "truque" mágico por aí que possa fazer o trabalho. No entanto, a documentação afirma que,
O sistema interno subjacente responsável por fornecer os resultados da pesquisa espera um
Activity
, não umFragment
; portanto,Activity
não é possível implementar uma interface de pesquisa completamente independente de uma , pois isso exigiria alterações no próprio sistema subjacente . Confira o código-fonte daSearchableInfo
classe, se você não acredita em mim :).Dito isto, não parece que seria muito difícil conseguir algo semelhante ao que você está descrevendo. Por exemplo, você pode considerar implementar sua Atividade pesquisável para que ela aceite a
android.intent.action.SEARCH
intenção e (em vez de exibir imediatamente os resultados em umListView
, por exemplo) passe a consulta de pesquisa para seusFragment
s. Por exemplo, considere a seguinte atividade pesquisável:Quando uma solicitação de pesquisa é feita, o sistema inicia sua atividade pesquisável, executa a consulta e passa os resultados para alguma atividade do contêiner (com base na sua implementação de
doMySearch
). O contêiner Activity passará esses resultados para o pesquisável contidoFragment
, no qual os resultados serão exibidos. A implementação requer um pouco mais de trabalho do que você provavelmente esperava, mas tenho certeza de que há maneiras de torná-lo mais modular e parece que isso pode ser o melhor que você pode fazer.ps Se você usar essa abordagem, talvez seja necessário prestar atenção especial a quais atividades são adicionadas / removidas no backstack. Consulte este post para obter mais informações sobre como isso pode ser feito.
pps Você também pode esquecer completamente a interface de pesquisa padrão e implementar uma pesquisa simples dentro de uma
Fragment
descrição descrita no post de Raghav abaixo .fonte
SearchManager
porFragment
certo? (ou algo parecido)Aqui está o exemplo para pesquisar algo usando fragmentos. Espero que ajude e é isso que você está procurando:
fonte
Fragment
para que eu não reclame. Parabéns! : PonQueryTextChange
método não está sendo chamado.É bem possível pesquisar em um fragmento usando a API padrão do ActionBar SearchView ActionView. Isso também funcionará no Android 2.1 (API nível 7) usando as classes de suporte do AppCompat v7.
No seu fragmento:
No seu menu XML
fonte
item.setShowAsAction(MenuItem.SHOW_AS_ACTION_COLLAPSE_ACTION_VIEW | MenuItem.SHOW_AS_ACTION_IF_ROOM); item.setActionView(searchView);
Usando as classes de suporte do AppCompat v7. Basta adicionar algo a @ David solução 's de @Rookie solução para obtê-lo funcionar corretamente, de forma simples, aqui está o meu código fragmento:
MyFragment :
Eu adicionei o
onActivityCreated
, porque sem ligar parasetHasOptionsMenu(true);
o sistema não saberá que esse fragmento precisa interagir com o menu.removi a linha
inflater.inflate(R.menu.main, menu);
porque ela dobrava os itens de menu, pois a Activity inflava um menu e, em seguida, o Fragment inflava outro menuObrigado a @David e @Rookie
fonte
Ao trabalhar com
Fragments
você, você ainda precisa usar umActivity
para controlar e atribuir oFragments
. IssoActivity
pode ter a funcionalidade de pesquisa como antes.Recentemente, mudei de um
Activity
aplicativo baseado em 'normal' para umFragment
aplicativo baseado e a funcionalidade de pesquisa funcionou da mesma forma para mim.Você já tentou trabalhar nisso e não teve sucesso? Se sim, forneça mais alguns detalhes em sua pergunta.
EDITAR:
Se você quer ter uma pesquisa fragmento específico, tem todo o seu
Fragments
estender uma interfaceMyFragment
com umstartSearch
método, e ter o seuActivity
'sstartSearch
método chamado do fragmento atualstartSearch
método.fonte
Acho que consegui: você pode realmente usar fragmentos e adicionar um ícone de pesquisa a uma barra de ação, para que seja possível uma pesquisa dentro dos fragmentos. O truque é usar uma barra de ação, uma exibição de ação, um ouvinte, um carregador e um adaptador, é claro.
Isso funciona muito bem, embora ignore completamente o mecanismo de pesquisa da plataforma Android (mas pode ser concluído com algum trabalho para encontrar o que @Alex Lockwood descreve e passar a pesquisa para fragmentos). Não reagiria a uma intenção conforme o esperado no caso de uma atividade, mas funciona: os usuários podem pesquisar dentro de fragmentos.
Aqui está o código:
O arquivo xml para o menu dos fragmentos de pesquisa res / menu / menu_search.xml:
E o arquivo de layout xml res / layout / search_in_fragments.xml
fonte
SearchView
biblioteca ActionBarSherlock devido à sua complexidade ( veja seu comentário aqui ). Como você pode ver (e como descrevi na minha resposta também), a implementação de pesquisa do Android é tudo menos trivial ... está enraizada no sistema subjacente, e isso dificulta a escrita de bibliotecas de terceiros (e isso está dizendo algo. .. Jake Wharton é como o Chuck Norris das bibliotecas de terceiros!: D).SearchView.java
código fonte aqui.Use o
ActionBar
eSearchView
. Você poderá gerenciar pesquisas sem nenhuma conexão com a Atividade. Basta definir umOnQueryTextListener
para o SearchView.Consulte esta postagem para obter mais detalhes sobre a pesquisa personalizada.
fonte
solução de outros ..... eu não gosto disso. Isso é mais fácil para mim, mas é minha ideia. Estou esperando a sua opinião
fonte
A
Fragment
não pode existir fora de umActivity
, nem podeFragment
ser vinculado a umandroid.intent.action.SEARCH
ou a qualquer outrointent-filter
.Portanto, sem usar um
Activity
para quebrar oFragment
, o que você está perguntando não é possível.fonte
No caso de fragmentos em um ViewPager, eu poderia fazê-lo bloqueando o botão de pesquisa quando não estiver no fragmento em que desejo fornecer uma barra de pesquisa. Para a atividade:
E, no caso de nenhum botão de pesquisa física, adicionei um item de ação ao fragmento, que aciona este código:
fonte
Encontrei uma solução alternativa :) Você pode substituir esse método (startActivity (Intent)) em sua BaseActivity e verificar se a ação é ACTION_SEARCH e fazer seu trabalho especial: D
fonte
Sim é possivel,
implementa a visualização de pesquisa em sua atividade, 'onQueryTextChange' em Activity também ouvirá a pesquisa em fragmentos, você pode verificar a visibilidade do fragmento em 'onQueryTextChange'; se visível, você pode chamar seu método de pesquisa por fragmento, seu funcionamento é perfeito no meu código
fonte