Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/198.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android(Facebook API)-如何强制调用onComplete(捆绑值)?_Android_Facebook_Dialog_Bundle - Fatal编程技术网

Android(Facebook API)-如何强制调用onComplete(捆绑值)?

Android(Facebook API)-如何强制调用onComplete(捆绑值)?,android,facebook,dialog,bundle,Android,Facebook,Dialog,Bundle,我在屏幕上有一个facebook对话框,我在页面右上角的facebook登录页面旁边放了一个按钮。我想做的是,如果用户点击该按钮,关闭Facebook对话框,并传递启动Facebook对话框的活动的一些值,即调用: mFacebook.authorize(this, Settings.FACEBOOK_PERMISSIONS, Facebook.FORCE_DIALOG_AUTH, new LoginDialogListener()); 问题是,我只知道如何关闭Facebook对话框,而无

我在屏幕上有一个facebook对话框,我在页面右上角的facebook登录页面旁边放了一个按钮。我想做的是,如果用户点击该按钮,关闭Facebook对话框,并传递启动Facebook对话框的活动的一些值,即调用:

  mFacebook.authorize(this, Settings.FACEBOOK_PERMISSIONS, Facebook.FORCE_DIALOG_AUTH, new LoginDialogListener());
问题是,我只知道如何关闭Facebook对话框,而无法向其传递任何参数,因为DialogListener的回调函数onCancel没有收到捆绑包。如果签名是onCancelBundle捆绑包,我无法将参数传递回原始活动

换句话说,我想要的是类似onCancelBundle捆绑包的东西,不幸的是,它不存在,或者是一种通过编程返回回调onCompleteBundle值的方法,因为这样,我可以读取在Facebook对话框出现在屏幕上时设置的捆绑包值

提前谢谢你

更新代码 下面是FbDialog.java的onCreate方法中的代码:

      @Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    mSpinner = new ProgressDialog(getContext());
    mSpinner.requestWindowFeature(Window.FEATURE_NO_TITLE);
    mSpinner.setMessage("Loading...");

    requestWindowFeature(Window.FEATURE_NO_TITLE);

    mContent = new FrameLayout(getContext());

    /* Create the 'x' image, but don't add to the mContent layout yet
     * at this point, we only need to know its drawable width and height 
     * to place the webview
     */
    createCrossImage();

    overlay = new ImageView(getContext());
    overlay.setImageDrawable(getContext().getResources().getDrawable(R.drawable.overlay_horiz));
    overlay.setTop(0);
    overlay.setLeft(0);
    overlay.setVisibility(View.INVISIBLE);

    /* Now we know 'x' drawable width and height, 
     * layout the webivew and add it the mContent layout
     */
    int crossWidth = mCrossImage.getDrawable().getIntrinsicWidth();
    setUpWebView(crossWidth / 2);


    /* Finally add the 'x' image to the mContent layout and
     * add mContent to the Dialog view
     */

    mContent.addView(mCrossImage, new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));

    FrameLayout main = new FrameLayout(getContext());
    main.addView(overlay, new LayoutParams(1280, 755));

    RelativeLayout rel = new RelativeLayout(getContext());

    mContent.setPadding(450, 60, 0, 0);
    rel.addView(mContent, new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT));

    closeIt = new ImageButton(getContext());
    closeIt.setBackgroundDrawable(getContext().getResources().getDrawable(R.drawable.closefb));

    RelativeLayout.LayoutParams lp = new RelativeLayout.LayoutParams(282, 150);
    lp.setMargins(980, 10, 0, 0);

    closeIt.setVisibility(View.INVISIBLE);
    closeIt.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            mListener.onCancel();
            FbDialog.this.hide();//HERE!!! =D
        }
    });

    rel.addView(closeIt,lp);

    main.addView(rel, new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT));

    addContentView(main, new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT));
}
我说的按钮是closeIt按钮

您看到closeIt按钮的setOnClickListener方法了吗?因此,我只能关闭或隐藏按钮。当我执行这些操作时,会调用LoginDialogListener的onCancel方法。问题是,我无法检测到它是否来自该按钮,因为当用户按下facebook对话框旁边的取消默认X按钮时,流也会转到相同的onCancel方法。如果我能够检测到它来自我的按钮,那么我可以在代码中做一些我想要的其他事情

再次感谢您。

更改Facebook.DialogListener类并向其添加新的onCancelBundle函数,您也可以将现有的onCancel更改为onCancelBundle,但应避免此操作,以保持与现有代码的兼容性,然后在单击closeIt按钮时调用onCancelBundle

如果在FbDialog中可以访问LoginDialogGlistener,则在其中定义一个新函数onCancelBundle,您可以使用任何对象而不是Bundle。然后,在您单击closeIt按钮时,调用

closeIt.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            ...initialize_bundle...
            ((LoginDialogListener) mListener).onCancel(bundle);
            FbDialog.this.hide();//HERE!!! =D
        }
    });
closeIt.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            ...initialize_bundle...
            ((classA) mListener).onCancel(bundle);
            FbDialog.this.hide();//HERE!!! =D
        }
    });

定义Facebook.DialogListener的一个新子类,比如说classA,它有一个新的onCancelBundle函数。此classA应该对FbDialog可见。现在重新定义LoginDialGlistener,使其成为classA的子类。在单击closeIt按钮时,调用

closeIt.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            ...initialize_bundle...
            ((LoginDialogListener) mListener).onCancel(bundle);
            FbDialog.this.hide();//HERE!!! =D
        }
    });
closeIt.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            ...initialize_bundle...
            ((classA) mListener).onCancel(bundle);
            FbDialog.this.hide();//HERE!!! =D
        }
    });

希望能有帮助

当fb对话框打开时,您是否能够单击活动屏幕上的按钮?而且这个包来自facebook代码,为什么你还要编辑它呢?我在facebook对话框的登录屏幕旁创建了一个按钮。我可以点击它,但在那之后,我能做的最多的就是关闭Facebook对话框,而不将任何参数传递给之前的活动——启动Facebook对话框的活动。如果用户按下按钮,我只想将一些参数传递给上一个活动,但我找不到方法。你在facebook对话框上有按钮吗?如果没有,则只能在对话框关闭后单击该按钮。前一个活动是否也没有收到onCancel回调?如果是,则表示用户已取消该对话框。是的,我在Facebook对话框中有我的按钮。我按程序把它放在那里,就在登录字段旁边。因此,当用户点击按钮时,我可以关闭对话框,这使我返回onCancel方法。但是,如果用户点击Facebook对话框上角的标准x按钮,它也会进入onCancel方法。我需要能够区分用户何时按下X按钮或我的按钮,这就是为什么我需要像onCancelBundle b这样的东西。这样我就可以填充包,看看用户是否按下了我的按钮。你能发布你的按钮相关代码吗?如何访问FBDialog。一种方法是,您可以将DialogListener子类化,定义一个新函数,或者重载onCancel并将其传入Authority,然后在连接到按钮的onClickListener中传递所需的值。嗨,Kailash,再次感谢您的回复。我觉得我们快结束了!=但我有一个问题:如何调用我将创建的onCancellBundle b方法?这是一个回调函数,所以我不知道如何调用它。LoginDialogGlistener私有类位于不同的.java文件中,而FbDialog.java.位于不同的java文件中并不重要,除非facebook代码是不同的项目,例如图书馆项目。看来您对Java还是新手。如果你真的想要简单的解决方法,请选择第一种见我答案的方法,否则选择第三种最后一种方法。关于如何打电话?我已经更新了我的答案。好吧,解决方案3是正确的选择,因为Facebook代码在它自己的项目中。谢谢你,凯拉什!很抱歉没有接受你的问题 躺卧者。这周我在办公室里疯了,我忘了这么做。