3

当使用 facebook android sdk 打开对话框时,一切正常。

但是,如果用户单击“后退”按钮,则对话框确实会关闭,但不会调用对话框侦听器的onCancel方法(或任何其他方法)。

我搜索了这个问题,并从 github 上的 fb android sdk 中找到了这个拉取请求:Calls Cancel on DialogListener when Dialog is Canceled

我参加了一部分并对其进行了一些修改以得到这个:

@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 的源代码,因为以后可能会出现问题(如果/当它们更新时)。

有任何想法吗?

4

2 回答 2

6

您应该修改FbDialog类。添加此行以设置不能使用 BACK 键取消的对话框:

setCancelable(false);

或者添加这些行来处理 BACK 键单击:

@Override
public void onBackPressed() {
    mWebView.stopLoading();
    dismiss();
    mListener.onCancel();
}
于 2012-08-30T16:19:10.963 回答
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();
        }

    }
于 2012-06-19T18:39:24.733 回答