我根据给定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);
}
有很多MainActivity
,Fragments
不仅在Facebook登录过程中不能为空。所以我有两个问题:
为什么在Facebook登录过程后再次创建savedInstanceState
?不应该只调用MainActivity
的{{1}}吗?
如果要创建,我怎么知道这是因为Facebook SDK调用了它?
MainActivity
FacebookPrefsFragment
FacebookPrefsFragment
onActivityResult
答案 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
:那是因为我在手机上激活了“不要保持活动”选项!现在我必须找出在这种情况下该做什么......