Третье вызванное действие возвращает свой результат в первое действие вместо отправки результата во второе действие? - PullRequest
5 голосов
/ 20 февраля 2012

Сценарий:

  1. Первое действие начинает секундное действие с startActivityForResult
  2. Второе действие начинает третье действие с startActivityForResult

Ожидаемый результат: Третий (последний)действие устанавливает результат, который попадает на onActivityResult second действия

Текущий результат: третье (последнее) действие устанавливает результат, который попадает на onActivityResult first * 1014 действия1015 * Как я могу установить результат для третьего действия, которое будет зафиксировано в третьем (последнем) действии второго действия, задает результат, который пойман в onActivityResult второго действия?

Некоторые фрагменты кода:

Первое занятие

public class TestProjActivity extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    //setContentView(R.layout.main);

    Log.i("TAAAG", "1st activity - startActivityForResult");
    Intent intent = new Intent(TestProjActivity.this, Activ2.class);
    intent.setFlags(Intent.FLAG_ACTIVITY_FORWARD_RESULT);
    startActivityForResult(intent, 1008);
}

@Override  
protected void onActivityResult(int requestCode, int resultCode, Intent data) {  
    super.onActivityResult(requestCode, resultCode, data);
    Log.i("TAAAG", "1st activity - onActivityResult");
    if (resultCode == RESULT_OK) {  
        Log.i("TAAAG", String.valueOf(requestCode));
        switch (requestCode) {  
        case 1008:
            String info = data.getExtras().getString("KEY1");
            Log.i("TAAAG", "1st activity - onActivityResult - printing result");
            Log.i("TAAAG", info);
            break;
        }
    }
}

}

Второе занятие

public class Activ2 extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    Log.i("TAAAG", "2nd activity - startActivityForResult");
    Intent intent = new Intent(Activ2.this, Activ3.class);

    startActivityForResult(intent, 1009);

    Intent intent2 = new Intent();
    intent2.putExtra("KEY1", "VALUE1");


    setResult(RESULT_OK, intent2);
    finish();
}

@Override  
protected void onActivityResult(int requestCode, int resultCode, Intent data) {  
    super.onActivityResult(requestCode, resultCode, data);
    Log.i("TAAAG", "2nd activity - onActivityResult");
    if (resultCode == RESULT_OK) {  
        Log.i("TAAAG", String.valueOf(requestCode));
        switch (requestCode) {  
        case 1009:
            String info = data.getExtras().getString("KEY2");
            Log.i("TAAAG", "2nd activity - onActivityResult - printing result");
            Log.i("TAAAG", info);
            break;
        }
    }
}

}

Третье занятие

 public class Activ3 extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    Log.i("TAAAG", "3rd activity - Inserting Value and finishing");

    Intent intent = new Intent();
    intent.putExtra("KEY2", "VALUE2");

    setResult(RESULT_OK, intent);
    finish();
}

}

Ответы [ 2 ]

10 голосов
/ 20 февраля 2012

используйте флаги активности для перенаправления результата в супер активность:

intent.setFlags(Intent.FLAG_ACTIVITY_FORWARD_RESULT);
3 голосов
/ 20 февраля 2012

Я думаю, вам следует удалить finish(); в последней строке второй операции ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...