当从fragment开始新活动时,未在主Activity上调用onActivityResult()

时间:2014-12-31 00:31:34

标签: android android-fragments start-activity

我知道有很多帖子说明当从片段调用startActivityForResult()时,为什么没有在片段中调用onActivityResult();但我的情况有所不同。

我的活动A有一个片段F,它为结果启动一个活动B.该片段在此处收到结果没有问题。问题是当重新启动活动A时,它使用在onResume()期间调用的AsynTask异步构建其整个视图。结果,我的片段F被活动A覆盖。

在我的片段中,我像这样启动Activity:

 startActivityForResult(intent, NewElementFragment.CODE_IMAGE_PATH);

所以我想,不用担心,我知道在onActivityResult()之后调用onResume(),所以我需要做的就是在onActivityResult()中确保在onResume()期间不会创建视图。

我创建了一个布尔值,我在onActivityResult()中设置为false,如下所示:

public void onActivityResult(int requestCode, int resultCode, Intent data) {
    //put the NewElementFragment back on top
    if (requestCode == NewElementFragment.CODE_IMAGE_PATH){
        //we set loadinfo to false so that the activity view won't get built 
        this.loadInfo = false;
        Log.d("MainActivity","the loadInfo boolean was set to false");
    }
    //Do default action on result (nothing) so that the result is passed on the the fragments
    super.onActivityResult(requestCode, resultCode, data);
}

但它没有用,因为显然onActivityResult()从未在我的活动A中被触发(尽管正如我之前所说,它在我的片段中被完美触发)。

所以最后我检查了Resume,如果我有一个活动片段,如果是,则中止视图创建,如下所示:

protected void onResume(){
    super.onResume();
    /*
     * We check if there is a fragment built that should be visible. If yes, we don't build the view
     */
    NewElementFragment f = (NewElementFragment) getFragmentManager().findFragmentByTag(TAG_NEW_ELEMENT_FRAGMENT);
    if (f!=null){
        loadInfo = false;
    }
    //We call the GetProductDetailTask
    if (loadInfo) new GetProductDetailTask(pId).execute();      
}

它有效,但我觉得很难看。有人能告诉我为什么onActivityResult()永远不会在我的活动A中被调用吗?

或者,如果某人有更好的解决方案,以确保我的活动在重新启动时不会覆盖我的片段?

谢谢。

1 个答案:

答案 0 :(得分:0)

您的托管活动必须实现某些界面,您必须从您的片段中调用它。在此Interface实现中,您可以通过startActivityForResult()调用另一个Activity。在这种情况下,您将在onActivityResult()处理中取得成功。