Деятельность началась с startActivityForResult (), не возвращаясь к вызову Activity - PullRequest
7 голосов
/ 13 марта 2012

У меня есть 3 вида деятельности - A , B и C .

Короче говоря, действие A запускает действие B, затем A также запускает действие C и ожидает результата от C, но никогда его не получает.

Вот рабочий процесс приложения:

  1. Действие A запускается при запуске приложения и запускает Действие B (не для результата, просто startActivity ()) в onCreate.

    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        startActivity(new Intent(getApplicationContext(), ActivityB.class));
    }
    
  2. Затем действие A также запускает действие C позже в коде, на этот раз для результата с помощью startActivityForResult (), а действие A также имеет onActivityResult.

    Intent intent = new Intent(getApplicationContext(), ActivityC.class);
    startActivityForResult(intent, 0);
    

    и

    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
       ...
    }
    
  3. Упражнение C использует setResult () и finish () для возврата некоторых данных, которые должны вернуться к занятию A, потому что занятие A вызвало startActivityForResult ().

    Intent intent = new Intent();
    intent.putExtra("encryption", encryption);
    setResult(56, intent);
    finish();
    

НО рабочий процесс замолкает на шаге 3 - onActivityResult операции A никогда не вызывается (и в этом случае B), даже несмотря на то, что операция A является той, которая запускает C для результата. Не уверен, что деятельность B мешает коммуникации A и C или в чем может быть проблема. Любая помощь очень ценится.

Ответы [ 3 ]

21 голосов
/ 21 марта 2012

Мне так и не удалось заставить это работать, поэтому я вместо этого использовал обработчик, чтобы вернуть данные нужному действию.

ОБНОВЛЕНИЕ : после повторного запуска,Я обнаружил, что настоящая причина, по которой это не сработало, заключается в том, что у меня было android:noHistory="true" для вызова / получения Действия A в манифесте.Удаление android:noHistory="true" исправило это, но если вам нужно, чтобы оно было правдой, то обработчики - хороший обходной путь.

1 голос
/ 13 марта 2012

Не думаю, что вы должны использовать getApplicationContext() в намерении.

С сайта разработчика.

getApplicationContext()
Return the context of the single, global Application object of the current process.

Когда вы вы startActivityForResult() пытаетесь вернуться к действию, указанному в намерении, которое вы предоставляете в качестве глобального контекста приложения.

Если у вас есть ActivityB, вы должны назвать его как

Intent intent = new Intent(ActivityB.this, ActivityC.class);
startActivityForResult(intent, 0);

Затем он попытается вернуться в ActivityB после завершения ActivityC.

0 голосов
/ 10 октября 2012

Вы можете попробовать:

if (getParent() == null) {
setResult(RESULT_OK, dataTobePassback);
} else {
getParent().setResult(RESULT_OK, dataTobePassback);
}

dataTobePassback - это Intent, в котором содержится материал, который вам может понадобиться для возврата к вызывающей деятельности

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