Eu começo o Activity
(descendente de PreferenceActivity
) da minha atividade de trabalho da seguinte forma:
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data)
{
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == 1458)
loadInfo();
}
void showSettingsDialog()
{
startActivityForResult(new Intent().setClass(this, MyConfigure.class), 1458);
}
MyConfigure
classe NÃO tem setResult()
chamadas. Na verdade, a MyConfigure
classe não tem nenhum código, exceto OnCreate()
onde carrega as preferências usando addPreferencesFromResource
.
Agora onActivityResult
é chamado requestCode
de 1458
prematuramente, logo após a MyConfigure
atividade ser executada. Testado em emuladores 1.6 e 2.1, bem como em dispositivos 2.1. Existe uma chamada para setResult()
enterrado em algum lugar PreferenceActivity
? Ou de que outra forma essa chamada prematura pode ser explicada?
android
android-activity
Retorno de chamada de Eugene Mayevski
fonte
fonte
Respostas:
Isso é corrigido alterando o modo de inicialização para
singleTop
:Há um bug / recurso (?) No Android, que relata imediatamente o resultado (que ainda não foi definido) para
Activity
, declarado comosingleTask
(apesar do fato de que a atividade continua em execução). Se mudarmoslaunchMode
a atividade pai desingleTask
parasingleTop
, tudo funcionará conforme o esperado - o resultado é relatado somente após o término da atividade. Embora esse comportamento tenha certa explicação (apenas umasingleTask
atividade pode existir e podem ocorrer vários garçons para ela), essa ainda é uma restrição não lógica para mim.fonte
Resolvi meu problema depois de remover
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
antes de ligarfragment.startActivityForResult(intent, 0);
.fonte
Acabei de remover todo o meu "android: launchMode" personalizado da minha Activity e tudo funcionou perfeitamente. Não é uma boa ideia mudar isso quando você não sabe EXATAMENTE o que o Android entende ... Android é um pouco complicado nesse sentido.
fonte
Isso aconteceu comigo quando a intenção tinha o
Intent.FLAG_RECEIVER_FOREGROUND
definida.(Sim, esse sinalizador não está relacionado à atividade, mas eu o tinha em todas as minhas intenções como parte de uma solução rápida para um problema diferente .)
fonte
Novamente, como no comentário de Mayra,
setResult()
não tem nada a ver com o seu problema. por algum motivo, aMyConfigure
classe termina sozinha e quando isso acontece,PreferenceActivity
apenas assume que pode haver um resultado deMyConfigure
porque foi assim que você escreveu o código.isso também acontece quando você força de volta qualquer atividade iniciada com
startActivityForResult()
...Então, eu acho que é melhor se concentrar em por que sua
MyConfigure
aula foi terminada à força.fonte