我在屏幕中有一个 facebook 对话框,我在页面的右上角(在 Facebook 的登录页面旁边)放置了一个按钮。我想要做的是,如果用户点击该按钮,关闭 Facebook 对话框并为启动 Facebook 对话框的活动传递一些值(即调用的活动:
mFacebook.authorize(this, Settings.FACEBOOK_PERMISSIONS, Facebook.FORCE_DIALOG_AUTH, new LoginDialogListener());
问题是我只知道如何关闭 Facebook 对话框而无法将任何参数传递给它,因为 DialogListener 的回调函数 onCancel() 不会t receive a Bundle. I can
将参数传递回原始活动(如果签名是 onCancel 我可以(捆绑包))。
换句话说,我想要的是类似于 onCancel(Bundle bundle) (不幸的是,它不存在)或以编程方式返回回调 onComplete(Bundle values) 的方式,因为这样,我可以阅读我在屏幕上显示 Facebook 对话框时设置的捆绑值)。
先感谢您!
更新(代码)
private class LoginDialogListener implements DialogListener {
public void onComplete(Bundle values) {
Settings.setFBStats(Settings.getFBStats() + 1);
facebookPost();
Util.showThanks(PhotoActivity.this, galleryName);
}
public void onFacebookError(FacebookError error) {
}
public void onError(DialogError error) {
}
public void onCancel() {
System.out.println("Hi! =D");
}
}
public void facebook(View target) {
mFacebook = new Facebook( getString(R.string.facebookappid) );
mAsyncRunner = new AsyncFacebookRunner(mFacebook);
mAsyncRunner.logout(this, new LogoutRequestListener());
mFacebook.authorize(this, Settings.FACEBOOK_PERMISSIONS, Facebook.FORCE_DIALOG_AUTH, new LoginDialogListener());
}
这是 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() 方法。如果我能够检测到它来自我的按钮,那么我可以在代码中做一些我想做的其他事情。
再一次感谢你。