![](/img/trans.png)
[英]Fragment onActivityResult method on executing calls activity onActivityResult
[英]Facebook callbackManager method onActivityResult not calling in Fragment onActivityResult method
我已經實現了 Facebook 集成,它在初始化的部分工作正常,即使 Facebook APPID 也適用於應用程序。
所以讓我更詳細地解釋一下:我在onCreate()
添加並初始化了 Facebook。
// Facebook callback manager
callbackManager = CallbackManager.Factory.create();
也在 Fragment Activity 中覆蓋 fragment 中的方法。
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
callbackManager.onActivityResult(requestCode, resultCode, data);
}
此方法在Activity
和Fragment
類中都是相同的。
但問題是當我請求 facebook AppInviteContent顯示一個AppInviteDialog 時,它在 Activity 中被完美調用 onActivityResult 方法,但在 Fragment 方法中沒有被調用。
如果有人有洞察力,請給我任何建議。 歡迎任何意見或建議。
根據 facebook文檔,在片段中,您應該調用此方法
> Java
loginButton.setFragment(this);
> Kotlin
loginButton.fragment = this
在 stackoverflow 中找不到解決方案,所以我自己做了
-> 在java類globalvaluesclass中添加callbackmanager,activity和fragment都可以訪問
-> 在你的父活動的 onCreate 添加這個 Globalvalues.callbackManager = CallbackManager.Factory.create();
-> 在您的片段中使用 Globalvalues.callbackManager 啟動您的 facebook 登錄類
LoginManager.getInstance().registerCallback(Globalvalues.callbackManager, new FacebookCallback() {
#all that fb stuff
}
-> 在您的父活動中覆蓋 onactivity 結果。
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
fragment.customOnActivityResult(requestCode, resultCode, data);
}
and in your fragment add a function for example as shown below
public static void customOnActivityResult(){
super.onActivityResult(requestCode, resultCode, data);
Globalvalues.callbackManager.onActivityResult(requestCode, resultCode,
data);
}
and you're Welcome.
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
callbackManager.onActivityResult(requestCode, resultCode, data);
super.onActivityResult(requestCode, resultCode, data);
}
當我使用以下代碼啟動登錄時遇到了這個問題:
LoginManager.getInstance().logInWithReadPermissions(getActivity(), Arrays.asList(EMAIL));
所以我明確要求使用 Activity 實例作為登錄結果的接收器。 解決方案是提供片段實例,為此存在適當的重載方法:
LoginManager.getInstance().logInWithReadPermissions(this, Arrays.asList(EMAIL));
這假設調用來自片段內。
我也遇到了同樣的問題,最初我在設置權限時沒有設置片段引用,所以我修改了我的調用,如下所示:
loginManagerFb.logInWithReadPermissions(
this,
listOf("public_profile", "email")
)
但我仍然面臨這個問題,沒有為我調用callbackManager
,所以我添加了onActivityResult()
如下:
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
super.onActivityResult(requestCode, resultCode, data)
callbackManager.onActivityResult(requestCode, resultCode, data)
}
上面代碼的問題是onActivityResult
現在已被棄用,因此為了刪除已棄用的代碼,我修改了以下代碼:
val loginManagerFb = LoginManager.getInstance()
loginManagerFb.logInWithReadPermissions(
this,
callbackManager,
listOf("public_profile", "email")
)
刪除棄用代碼所需的更改是在logInWithReadPermissions()
時傳遞callbackManager
引用
使用了 facebook 最新的庫版本:
implementation "com.facebook.android:facebook-android-sdk:12.0.0"
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.