Existe uma maneira muito mais simples de receber um resultado de um DialogFragment.
Primeiro, em sua Atividade, Fragmento ou FragmentActivity, você precisa adicionar as seguintes informações:
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
// Stuff to do, dependent on requestCode and resultCode
if(requestCode == 1) { // 1 is an arbitrary number, can be any int
// This is the return result of your DialogFragment
if(resultCode == 1) { // 1 is an arbitrary number, can be any int
// Now do what you need to do after the dialog dismisses.
}
}
}
O requestCode
basicamente é seu rótulo int para o DialogFragment que você chamou, mostrarei como isso funciona em um segundo. O resultCode é o código que você envia de volta do DialogFragment, informando o que aconteceu com Activity, Fragment ou FragmentActivity em espera no momento.
O próximo trecho de código a ser inserido é a chamada para o DialogFragment. Um exemplo está aqui:
DialogFragment dialogFrag = new MyDialogFragment();
// This is the requestCode that you are sending.
dialogFrag.setTargetFragment(this, 1);
// This is the tag, "dialog" being sent.
dialogFrag.show(getFragmentManager(), "dialog");
Com essas três linhas, você está declarando seu DialogFragment, configurando um requestCode (que chamará o onActivityResult (...) assim que o Diálogo for descartado e você estiver mostrando o diálogo. É simples assim.
Agora, em seu DialogFragment, você precisa apenas adicionar uma linha diretamente antes da, dismiss()
para enviar um resultadoCode de volta para onActivityResult ().
getTargetFragment().onActivityResult(getTargetRequestCode(), resultCode, getActivity().getIntent());
dismiss();
É isso aí. Observe que o resultCode é definido como o int resultCode
que eu defini resultCode = 1;
neste caso.
É isso, agora você pode enviar o resultado do seu DialogFragment de volta para a chamada Activity, Fragment ou FragmentActivity.
Além disso, parece que essas informações foram postadas anteriormente, mas não havia um exemplo suficiente, então pensei em fornecer mais detalhes.
EDIT 24.04.2016
Peço desculpas pelo código enganoso acima. Mas você certamente não pode receber o resultado de volta à atividade, visto como a linha:
dialogFrag.setTargetFragment(this, 1);
define um alvo Fragment
e não Activity
. Portanto, para fazer isso, você precisa usar o implement an InterfaceCommunicator
.
No seu DialogFragment
conjunto, uma variável global
public InterfaceCommunicator interfaceCommunicator;
Crie uma função pública para lidar com isso
public interface InterfaceCommunicator {
void sendRequestCode(int code);
}
Então, quando você estiver pronto para enviar a parte de trás do código para o Activity
quando o DialogFragment
é feito em execução, você simplesmente adicionar a linha antes de dismiss();
o seu DialogFragment
:
interfaceCommunicator.sendRequestCode(1); // the parameter is any int code you choose.
Na sua atividade, agora você precisa fazer duas coisas, a primeira é remover a linha de código que não é mais aplicável:
dialogFrag.setTargetFragment(this, 1);
Em seguida, implemente a interface e pronto. Você pode fazer isso adicionando a seguinte linha à implements
cláusula na parte superior da sua classe:
public class MyClass Activity implements MyDialogFragment.InterfaceCommunicator
E então @Override
a função na atividade,
@Override
public void sendRequestCode(int code) {
// your code here
}
Você usa esse método de interface como usaria o onActivityResult()
método. Exceto que o método de interface é para DialogFragments
e o outro é para Fragments
.