Existe alguma forma de implementarmos onBackPressed()
no Fragmento Android semelhante à forma como implementamos na atividade Android?
Como o ciclo de vida do fragmento não tem onBackPressed()
. Existe algum outro método alternativo para percorrer mais de 'onBackPressed()` em fragmentos do Android 3.0?
De acordo com @HaMMeRed a resposta aqui é pseudocódigo como deve funcionar. Vamos dizer que sua atividade principal se chama `BaseAtividade', que tem fragmentos de crianças (como no exemplo de SlidingMenu lib). Aqui estão os passos:
Primeiro precisamos criar uma interface e classe que implemente sua interface para ter um método genérico
Criar interface de classe 'OnBackPressedListener'.
interface pública OnBackPressedListener {
vazio público doBack();
}
Criar classe que implemente habilidades de 'OnBackPressedListener'.
classe pública BaseBackPressedListener implementa OnBackPressedListener {
atividade particular final FragmentoAtividade;
Public BaseBackPressedListener(FragmentActivity activity) {
esta.actividade = actividade;
}
@Override
vazio público doBack() {
activity.getSupportFragmentManager().popBackStack(null, FragmentManager.POP_BACK_STACK_INCLUSIVE);
}
}
Desde agora, vamos trabalhar no nosso código "BaseActividade" e nos seus fragmentos.
Crie um ouvinte privado no topo da sua classe "BaseActividade".
OnBackPressedListener onBackPressedListener protegido;
criar método para definir o ouvinte em "BaseActividade".
public void setOnBackPressedListener(OnBackPressedListener onBackPressedListener) {
this.onBackPressedListener = onBackPressedListener;
}
em override onBackPressed
implemente algo como isso
@Override
vazio público onBackPressed() {
se (onBackPressedListener != nulo)
onBackPressedListener.doBack();
mais
super.onBackPressed();
No seu fragmento em onCreateView
você deve adicionar o nosso ouvinte
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
atividade = getActivity();
((BaseActividade)actividade).setOnBackPressedListener(nova BaseBackPressedListener(actividade));
Ver vista = ... ;
//colha com vista
vista de retorno;
}
Voila, agora quando você clica de volta no fragmento, você deve pegar seu método personalizado de volta.
Se você queria esse tipo de funcionalidade você precisaria substituí-la na sua atividade, e então adicionar uma interface 'YourBackPressed' a todos os seus fragmentos, que você chama no fragmento relevante sempre que o botão voltar é pressionado.
Edit: I'gostaria de anexar a minha resposta anterior.
Se eu fosse fazer isso hoje, I'usaria uma transmissão, ou possivelmente uma transmissão ordenada se eu esperasse que outros painéis fossem atualizados em uníssono com o painel de conteúdo principal/main.
LocalBroadcastManager` na Biblioteca de Suporte pode ajudar com isso, e você apenas envia a transmissão em onBackPressed
e assina em seus fragmentos que se importam. Eu acho que o Messaging é uma implementação mais desacoplada e que escalaria melhor, por isso seria a minha recomendação oficial de implementação agora. Basta utilizar a ação Intent
's como um filtro para sua mensagem. envie sua recém-criada ACTION_BACK_PRESSED
, envie-a de sua atividade e escute-a nos fragmentos relevantes.
Basta adicionar addToBackStack
enquanto você está fazendo a transição entre seus fragmentos, como abaixo:
fragmentManager.beginTransaction().replace(R.id.content_frame,fragment).addToBackStack("tag").commit();
se você escrever addToBackStack(null)
, ele vai lidar com isso sozinho, mas se você der uma tag , você deve lidar com isso manualmente.