FirstActivity.Java
tem um FragmentA.Java
que chama startActivityForResult()
.
SecondActivity.Java
ligue, finish()
mas onActivityResult
nunca seja chamado, escrito em FragmentA.Java
.
FragmentA.Java
código:
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
// some code
Intent i = new Intent(getActivity(), SecondActivity.class);
i.putExtra("helloString", helloString);
getActivity().startActivityForResult(i, 1);
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
getActivity();
if(requestCode == 1 && resultCode == Activity.RESULT_OK) {
//some code
}
}
SecondActivity.Java
código:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//some code
Intent returnIntent = new Intent();
returnIntent.putExtra("result", result);
setResult(Activity.RESULT_OK,returnIntent);
finish();
}
Eu tentei depurar o código, mas onAcitvityResult()
nunca fui chamado.
android
android-fragmentactivity
Roshan Pawar
fonte
fonte
Respostas:
Você deve escrever
onActivityResult()
no seu daFirstActivity.Java
seguinte formaEntão, isso chamará o seu fragmento de
onActivityResult()
Edit: a solução é substituir
getActivity().startActivityForResult(i, 1);
porstartActivityForResult(i, 1);
fonte
onActivityresult()
deFirstAcivity.Java
é chamado eonActivityresult()
deFragmentA.Java
nunca ter chamado. Por favor ajude.startActivityForResult
vez degetActivity().start...
? Porque, tanto quanto eu posso ver, você está substituindo a definição deonActivityResult
por sua própria definição, na Atividade (ou seja, isso se comporta exatamente da mesma maneira que se a substituição na resposta não existisse).A resposta de Kevin funciona, mas dificulta a reprodução dos dados usando essa solução.
A melhor solução é não iniciar
startActivityForResult()
no nível da atividade.no seu caso, não ligue
getActivity().startActivityForResult(i, 1);
Em vez disso, basta usar
startActivityForResult()
e ele funcionará perfeitamente bem! :)fonte
Você deve escrever onActivityResult () em seu FirstActivity.Java da seguinte maneira
Isso acionará o método onActivityResult de fragmentos no FirstActivity.java
fonte
O fragmento já possui
startActivityForResult
, que chamariaonActivityResult
o fragmento se você o usar, em vez degetActivity()
...fonte
A coisa mais importante, que está faltando tudo aqui é ... O launchMode of FirstActivity deve ser singleTop. Se for singleInstance, o onActivityResult no FragmentA será chamado logo após chamar o método startActivityForResult. Portanto, ele não aguardará a chamada do método finish () no SecondActivity.
Então, siga as etapas a seguir. Definitivamente funcionará, pois também funcionou para mim após uma longa pesquisa.
No arquivo AndroidManifest.xml, torne launchMode de FirstActivity.Java como singleTop.
No FirstActivity.java, substitua o método onActivityResult. Como isso chamará o onActivityResult of FragmentA.
No FragmentA.Java, substitua o método onActivityResult
Chamada
startActivityForResult(intent, HOMEWORK_POST_ACTIVITY);
de FragmentA.Javafinish();
Método de chamada em SecondActivity.javaEspero que isso funcione.
fonte
Poderíamos ligar
startActivityForResult()
diretamente do Fragment. Então, você deve ligar emthis.startActivityForResult(i, 1);
vez degetActivity().startActivityForResult(i, 1);
A atividade enviará o resultado da atividade para o seu fragmento.
fonte
Que seja tarde para a resposta. Mas será útil para qualquer um.
No meu caso, quero chamar a atividade do Fragment e setResult novamente do fragmento.
Eu usei o getContext do Fragment Like.
E definir resultado do fragmento
Agora, obtendo o resultado para fragmentar com
fonte
onActivityResult () de MAinActivity chamará, onActivityResult () de Fragement não chamará porque fragmento é colocado em Activity, então obviamente ele volta para MainActivity
fonte
Não chame
finish()
noonCreate()
método, em seguida, ele funciona bem.fonte
chame seu
onActivityresult()
em ParentActivity.fonte