当使用facebook android sdk打开Dialogs时,一切正常。
但是,如果用户单击“返回”按钮,则对话框确实会关闭,但不会调用对话框侦听器(或任何其他方法)的 onCancel 方法。
我搜索了这件事并在github上发现了来自fb android sdk的拉取请求:Calls Cancel on DialogListener when Dialog is Cancelled。
我拿了一部分并修改了一下以获得这个:
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK && event.getAction() == KeyEvent.ACTION_DOWN) {
mWebView.stopLoading();
dismiss();
mListener.onCancel();
return true;
}
return true;
}
我将它添加到 FbDialog 类中,事实上这似乎可以解决问题。
我想知道为什么这不是sdk的一部分? 拉动请求超过一年,最后一个响应是大约11个月。 为什么不将它添加到sdk源?
由于此解决方案正在运行,因此并不紧急,但我不想修改facebook sdk的来源,因为以后可能会出现问题(如果/更新时)。
有什么想法吗?
答案 0 :(得分:6)
您应该修改 FbDialog 类。 添加此行以使用BACK键设置对话框不可取消:
setCancelable(false);
或者添加这些行来处理BACK键点击:
@Override
public void onBackPressed() {
mWebView.stopLoading();
dismiss();
mListener.onCancel();
}
答案 1 :(得分:0)
当后退按钮不会导致在DialogListener上触发取消方法时,你可能有一个带有错误的SDK。
在这里查看修补程序:https://github.com/facebook/facebook-android-sdk/pull/189
应用它之后,您可以在类中实现它:
//call for Fb login dialog
facebook.authorize(this, Constants.FACEBOOK_PERMISSIONS, Facebook.FORCE_DIALOG_AUTH, (DialogListener) new LoginDialogListener());
class LoginDialogListener implements DialogListener{
public void onComplete(Bundle values) {
saveCredentials(facebook);
postToWall();
}
public void onFacebookError(FacebookError error) {
showToast("Authentication with Facebook failed!");
finish();
}
public void onError(DialogError error) {
showToast("Authentication with Facebook failed!");
finish();
}
public void onCancel() {
//back button pressed or dialog cancel pressed
showToast("Authentication with Facebook cancelled!");
finish();
}
}