Tenho um fragmento em uma atividade que estou usando como gaveta de navegação. Ele contém botões que, quando clicados, iniciam novas atividades (startActivity a partir de um fragmento simplesmente chama startActivity na atividade atual).
Pela minha vida, não consigo descobrir como terminaria a atividade atual depois de começar uma nova.
Estou procurando conseguir algo assim no fragmento:
@Override
public void onClick(View view) {
// TODO Auto-generated method stub
if (view == mButtonShows) {
Intent intent = new Intent(view.getContext(), MyNewActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);
finish();
}
}
Mas parece que Fragment.class não implementa finish () (como implementa startActivity (...)).
Gostaria que o backstack de atividades fosse apagado quando eles iniciarem a 2ª atividade. (então, pressionar de volta para a nova atividade iria tecnicamente levá-los de volta ao iniciador)
getActivity()
pode sernull
em alguns casos. O que nós devemos fazer então?finish
.Bem, na verdade...
Eu não faria com que o Fragmento tentasse terminar a Atividade. Isso confere muita autoridade ao Fragmento, na minha opinião. Em vez disso, eu usaria o guia aqui: http://developer.android.com/training/basics/fragments/communicating.html
Faça com que o Fragment defina uma interface que a Activity deve implementar. Faça uma chamada para a Activity e deixe que a Activity decida o que fazer com as informações. Se a atividade quiser terminar sozinha, ela pode.
fonte
Conforme mencionado por Jon F Hancock , é assim que um fragmento pode 'fechar' a atividade, sugerindo que ela seja fechada. Isso torna o fragmento portátil, pois é a razão para eles. Se você usá-lo em uma atividade diferente, pode não querer fechar a atividade.
O código abaixo é um trecho de uma atividade e fragmento que tem um botão Salvar e Cancelar.
PlayerActivity
PlayerInfoFragment, que contém uma interface que a atividade de chamada precisa implementar.
fonte
Cada vez que uso terminar para fechar o fragmento, toda a atividade fecha. De acordo com os documentos, os fragmentos devem permanecer enquanto a atividade pai permanecer.
Em vez disso, descobri que posso alterar as visualizações da atividade pai usando esta instrução: setContentView (R.layout.activity_main);
Isso me leva de volta à atividade dos pais.
Espero que isso ajude alguém que possa estar procurando por isso.
fonte
Muito simples...
1- apenas pegue a atividade
getActivity()
no fragmento2- então ligue
finish();
Então, só
getActivity().finish();
vai terminar a atividade dos pais.fonte
Você deve usar o método getActivity () a fim de terminar a atividade do fragmento.
fonte
Em Fragment, use getActivity.finishAffinity ()
Ele removerá todos os fragmentos que foram enviados pela atividade atual da Pilha com a Atividade também ...
fonte
Experimente isso. Não deve haver nenhum aviso ...
fonte
15 de junho de 2020 - Resposta atualizada.
Você tem duas opções para Java e Kotlin. No entanto, a lógica de ambas as maneiras é a mesma. Você deve chamar a atividade após a chamada do método terminar () .
Se sua atividade não pode ser nula, use Answer_1 . No entanto, se sua atividade pode ser nula , use Answer_2 .
@canerkaseler
fonte
sim
Fragment.class
não implementafinish()
Ao trabalhar com fragmentos, em vez de usar isso ou se referir ao contexto, sempre use
getActivity()
. Você deveria ligarfonte