Facebook Android SDK:为什么在调用Fragment的onActivityResult之前重新创建Activity?

时间:2013-10-04 05:13:29

标签: android facebook-android-sdk

我根据给定here的示例编写了一个Fragment来管理Facebook登录/注销Facebook Android SDK 3.5.2。

完成通过Facebook网页小部件的登录过程后,再次启动MainActivity(调用onCreate)。

然后在savedInstanceState!=null的{​​{1}}中的MainActivity示例代码中,检查onCreate以确定是否必须恢复现有的savedInstanceState实例或者如果必须创建新实例:

FacebookPrefsFragment

我的问题是我的if (savedInstanceState == null) { // Add the fragment on initial activity setup mainFragment = new MainFragment(); getSupportFragmentManager() .beginTransaction() .add(android.R.id.content, mainFragment) .commit(); } else { // Or set the fragment from restored state info mainFragment = (MainFragment) getSupportFragmentManager() .findFragmentById(android.R.id.content); } 有很多MainActivityFragments不仅在Facebook登录过程中不能为空。所以我有两个问题:

  • 为什么在Facebook登录过程后再次创建savedInstanceState?不应该只调用MainActivity的{​​{1}}吗?

  • 如果要创建,我怎么知道这是因为Facebook SDK调用了它?

MainActivity

FacebookPrefsFragment

FacebookPrefsFragment

onActivityResult

3 个答案:

答案 0 :(得分:2)

这篇文章有点过时,但我想我会留下这个,因为任何人遇到我面临的问题。当未安装本机Facebook应用程序时,我的应用程序正在重新创建,并且即使我有正确的请求代码和数据,callbackManager.onActivityResult()仍然返回false。如果初始调用返回false,我可以通过重置和调用以下内容来解决此问题:

facebookButton.registerCallback(callbackManager, Activity.this);
callbackManager.onActivityResult(requestCode, resultCode, data);

答案 1 :(得分:1)

你需要玩

    @Override
    public void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        uiHelper.onActivityResult(requestCode, resultCode, data);
    }

查看应用程序来源时的请求代码是什么。 资料来源:https://github.com/facebook/facebook-android-sdk/blob/master/facebook/src/com/facebook/widget/FacebookDialog.java#L210

我在几个月前对它进行了测试,requestCode可用于识别应用程序是否从Facebook回来。

[编辑]

这是一个丑陋的黑客,但如果requestCode == 64206那么你的活动刚从facebook回来。

答案 2 :(得分:0)

糟糕,我发现为什么每次都会重新创建MainActivity:那是因为我在手机上激活了“不要保持活动”选项!现在我必须找出在这种情况下该做什么......