gpt4 book ai didi

android - 为什么 Android Facebook 界面不支持 Fragments?

转载 作者:太空狗 更新时间:2023-10-29 15:30:28 25 4
gpt4 key购买 nike

我正在将一些 Android Facebook 代码从 Activity 切换到 Fragment。在切换之前一切正常,但现在 onComplete() 回调未被执行。

Facebook 代码是否不适用于 Fragments,还是我做错了什么?

这是原始代码(在 SherlockActivity 中):

if (!mFacebook.isSessionValid()) {
mFacebook.authorize(MyActivity.this, permissions, new DialogListener() {
@Override
public void onComplete(Bundle values) { ... } // CALLED AS EXPECTED
}
}

这是新代码(在 SherlockFragment 中):

if (!mFacebook.isSessionValid()) {
mFacebook.authorize(getActivity(), permissions, new DialogListener() {
@Override
public void onComplete(Bundle values) { ... } // DOES NOT GET CALLED
}
}

Activity 和 Fragment 都包含 Facebook 要求的相同 onActivityResult():

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

感谢您的帮助!

编辑:问了一个类似的问题here ,其中接受的答案是将 Fragment 更改为 FragmentActivity。但我看不出这有什么帮助,因为它不再是 Fragment(出于其他原因我需要它)。有什么建议吗?

编辑 2:我推出了自己的解决方案。见下文。

最佳答案

据我所知,Facebook 身份验证 API 不支持 fragment 。具体来说,来自 Facebook authorize() 调用的 onComplete() 回调适用于 Activities,但不适用于 Fragments .

所以我为 Fragments 整理了一个简单的解决方法。解决方案取决于当 authorize() 调用完成时 onActivityResult() 也在父级 Activity 中调用的事实,因此您可以使用它为 Fragment 设置一个单独的回调机制。

首先,在父级Activity中设置一个变量来携带目标Fragment的名称,比如说

TargetFragment mTargetFragment;

您可以在 Fragment 首次实例化时初始化它,如下所示:

@Override
public void onAttachFragment(Fragment fragment) {
super.onAttachFragment(fragment);

String fragmentSimpleName = fragment.getClass().getSimpleName();

if (fragmentSimpleName.equals("TargetFragment"))
mTargetFragment = (TargetFragment)fragment;
}

然后在 onActivityResult() 函数中添加几行:

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

if (mTargetFragment != null)
mTargetFragment.myCallBack(requestCode, resultCode, data);
}

现在您可以在新的 myCallBack() 函数中模仿通常放在 onComplete() 回调中的代码:

public void myCallBack(int requestCode, int resultCode, Intent data) {
mFacebook.authorizeCallback(requestCode, resultCode, data);

// other code from your onComplete() function ...
}

我希望这可以帮助其他人。干杯!

关于android - 为什么 Android Facebook 界面不支持 Fragments?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10943392/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com