ページの右上 (Facebook のログイン ページの隣) にボタンを配置した画面に Facebook ダイアログがあります。私がやりたいことは、ユーザーがそのボタンを押した場合、Facebook ダイアログを閉じて、Facebook ダイアログを開始したアクティビティ (つまり、以下を呼び出したアクティビティ) にいくつかの値を渡すことです。
mFacebook.authorize(this, Settings.FACEBOOK_PERMISSIONS, Facebook.FORCE_DIALOG_AUTH, new LoginDialogListener());
問題は、DialogListener のコールバック関数 onCancel() がt receive a Bundle. I can
パラメーターを元のアクティビティに戻さないため、パラメーターを渡すことができずに Facebook ダイアログを閉じる方法しか知らないことです (署名が 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() メソッドに移動するため、そのボタンから来たことを検出できないことです。それがボタンからのものであることを検出できれば、コードで他の必要なことを実行できます。
もう一度ありがとう。