Facebook对话框和后退按钮

时间:2012-04-23 09:27:05

标签: facebook dialog back-button facebook-android-sdk

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

有什么想法吗?

2 个答案:

答案 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();
        }

    }