I têm um tabulada ActionBar / viewpager disposição com três abas dizer Um , B , e C . No separador C separador (fragmento), estou adicionando outro fragmento digamos fragmento D . com
DFragment f= new DFragment();
ft.add(android.R.id.content, f, "");
ft.remove(CFragment.this);
ft.addToBackStack(null);
ft.commit();
Eu modifico a barra de ação no onResume do DFragment para adicionar o botão:
ActionBar ab = getActivity().getActionBar();
ab.setNavigationMode(ActionBar.NAVIGATION_MODE_STANDARD);
ab.setDisplayHomeAsUpEnabled(true);
ab.setDisplayShowHomeEnabled(true);
Agora em DFragment, quando pressiono o botão Voltar do hardware (telefone), volto ao layout Tabbed (ABC) original com CFragment selecionado. Como posso obter essa funcionalidade com o botão da barra de ação para cima?
android
android-fragments
android-actionbar
SohailAziz
fonte
fonte
Respostas:
Implemente
OnBackStackChangedListener
e adicione este código à sua atividade de fragmento.fonte
onSupportNavigateUp()
, "Método não sobrescreve método de sua superclasse".onOptionsItemSelected
, também é possível verificar o itemId emandroid.R.id.home
vez de adicioná-loonSupportNavigateUp
.ActionBar
? Não vejo nenhum quando implemento este código. Só consigo clicar no ícone, mas não faz nada. Android 4.0+.Deixa comigo. basta substituir onOptionsItemSelected na atividade de hospedagem e abrir o backstack, por exemplo
Chamada
getActionBar().setDisplayHomeAsUpEnabled(boolean);
egetActionBar().setHomeButtonEnabled(boolean);
emonBackStackChanged()
como explicou em uma resposta abaixo.fonte
switch
instrução com o casoandroid.R.id.home
.Se você tem uma atividade principal e deseja que esse botão para cima funcione como um botão para voltar, você pode usar este código:
adicione isso ao onCreate em sua classe de atividade principal
e, em seguida, adicione onOptionsItemSelected assim:
Eu geralmente uso isso o tempo todo e parece bastante legítimo
fonte
Activity
meu, na esperança de que ele voltasse ao fragmento de onde partiu. O botão Voltar aparece perto do ícone do meu aplicativo quando vou para o meuActivity
, mas clico no ícone e nada acontece (ele deve voltar para o fragmento). Alguma ideia do porquê? Obrigado.você pode voltar com o botão para cima como o botão de voltar;
fonte
Eu sei que esta pergunta é antiga, mas pode ser alguém (como eu) também precisa dela.
Se sua Activity estende AppCompatActivity , você pode usar uma solução mais simples (duas etapas):
1 - Sempre que você adicionar um fragmento não doméstico, basta mostrar o botão para cima, logo após confirmar a transação do fragmento. Como isso:
2 - Aí quando o botão UP é pressionado, você esconde.
É isso aí.
fonte
Usei uma combinação de Roger Garzon Nieto e Sohailaziz respostas . Meu aplicativo tem uma única MainActivity e fragmentos A, B, C que são carregados nele. Meu fragmento "inicial" (A) implementa OnBackStackChangedListener e verifica o tamanho do backStack; se for menor que um, oculta o botão PARA CIMA. Os fragmentos B e C sempre carregam o botão Voltar (em meu projeto, B é iniciado de A e C é iniciado de B). A própria MainActivity apenas exibe o backstack no toque do botão UP, e tem métodos para mostrar / ocultar o botão, que os fragmentos chamam:
Atividade principal:
fragmentA (implementa FragmentManager.OnBackStackChangedListener):
fragmentB, fragmentC:
fonte
Isso funcionou para mim. Substitua onSupportNavigateUp e onBackPressed, por exemplo (código em Kotlin);
Agora no fragmento, se você exibir a seta para cima
Clicar nele leva você de volta à atividade anterior.
fonte
Kotlin:
fonte
Esta é uma solução muito boa e confiável: http://vinsol.com/blog/2014/10/01/handling-back-button-press-inside-fragments/
O cara fez um fragmento abstrato que lida com o comportamento backPress e está alternando entre os fragmentos ativos usando o padrão de estratégia.
Para alguns de vocês, talvez haja uma pequena desvantagem na classe abstrata ...
Em breve, a solução do link é assim:
E uso na atividade:
fonte