Конкатенация Android onActivityResult () не запускается

У меня есть три действия A, B и C. Из действия A я могу вызвать действие B, а из B я могу вызвать C, и я также могу вызвать действие C из действия A напрямую.

Дело в том, что при возврате результата из C напрямую в A через методы setResult и onbackpressed все работает нормально. Проблема возникает, когда из действия C я возвращаю результат в действие B, а в его onActivityResult я еще раз вызываю setResult и onbackpressed, чтобы передать тот же результат в действие A.

Activity A появляется снова, но в этом случае его onActivityResult никогда не срабатывает.

Вот некоторый код.

В действии С:

if (selection) {
    setResult(RESULT_OK, data);
} else {
    setResult(RESULT_CANCELED, data);
}
selection = false;
super.onBackPressed();

В действии B получите результат C и попытайтесь передать его обратно в действие A.

protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    switch (resultCode) {
        case RESULT_OK:
            setResult(RESULT_OK, data);
            onBackPressed();
            break;
        case RESULT_CANCELED:
            if (list_search != null && !list_search.getAdapter().isEmpty()) {
                list_search.setSelection(data.getIntExtra("position", 0));
            }
            break;
    }
}

А вот А onActivityResult. Я получаю результат, если он поступает из B или из C, но он срабатывает только при поступлении непосредственно из C. когда идет через B, появляется A, но не вызывает onActivityResult, поэтому я не могу получить данные в этом случае.

public void OnActivityResult(int requestCode, int resultCode, Intent intent) {
    .... 
    switch (resultCode) {
        case RESULT_CANCELED:
            sincronizaCursorArticulos(intent.getStringExtra("cd_articulo"));
            break;

        case RESULT_OK:
            sincronizaCursorArticulos(intent.getStringExtra("cd_articulo"));
            fragment_order_entering.setEtArticulo(intent.getStringExtra("cd_articulo"));
            fragment_order_entering.loadArticulo(false);
            break;
    }
}

Большое спасибо заранее.


person xantiso    schedule 15.12.2014    source источник


Ответы (2)


OnActivityResult, похоже, не работает во многих случаях, если есть какой-либо атрибут android:launchMode="singleTask|SingleInstance", добавленный к соответствующему действию, которое вы начали с StartActivityForResult() в файле androidmanifest.xml.

ref: onActivityResult With launchMode=singleTask?

person Ravi Teja.M    schedule 15.12.2014

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

person xantiso    schedule 15.12.2014