Android连接onActivityResult()未触发

时间:2014-12-15 11:15:04

标签: android onactivityresult

我有三个活动A,B和C.从活动A我可以调用活动B,从B我可以调用C,我也可以直接从活动A调用活动C.

事情是,当通过setResultonbackpressed方法将结果从C直接返回到A时,一切正常。问题来自于活动C我将结果返回给B,而onActivityResult我再次呼叫setResultonbackpressed将相同的结果传递给活动A.

Activity A再次出现,但在这种情况下,onActivityResult永远不会被触发。

这是一些代码。

在活动C中:

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

在活动B中得到C&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;
    }
}

非常感谢。

2 个答案:

答案 0 :(得分:1)

如果在androidmanifest.xml文件中使用StartActivityForResult()启动的相应活动中添加了android:launchMode =“singleTask | SingleInstance”属性,则很多情况下,OnActivityResult似乎不起作用。

参考:onActivityResult With launchMode="singleTask"?

答案 1 :(得分:0)

抱歉,我忘了提到这三个活动都有singleTop launchMode。