Accessing Google APIsのガイドにうまく従った後、すべての Google+ 関連コードを自分のコードからMainActivity
別のカスタムGoogleFragmentに移動しようとしています。
しかし、私は最後の場所で立ち往生しています - 私のカスタムフラグメントでは、が却下されmResolvingError
た後にフィールドにアクセスする方法がわかりません:DialogFragment
public class GoogleFragment extends Fragment
implements GoogleApiClient.OnConnectionFailedListener {
private boolean mResolvingError = false; // HOW TO ACCESS?
@Override
public void onConnectionFailed(ConnectionResult connectionResult) {
if (mResolvingError) {
// Already attempting to resolve an error.
return;
} else if (connectionResult.hasResolution()) {
try {
mResolvingError = true;
connectionResult.startResolutionForResult(getActivity(), REQUEST_RESOLVE_ERROR);
} catch (IntentSender.SendIntentException e) {
// There was an error with the resolution intent. Try again.
if (mGoogleApiClient != null)
mGoogleApiClient.connect();
}
} else {
// Show dialog using GoogleApiAvailability.getErrorDialog()
showErrorDialog(connectionResult.getErrorCode());
mResolvingError = true;
}
}
private void showErrorDialog(int errorCode) {
// Create a fragment for the error dialog
ErrorDialogFragment dialogFragment = new ErrorDialogFragment();
// Pass the error that should be displayed
Bundle args = new Bundle();
args.putInt(ARGS_DIALOG_ERROR, errorCode);
dialogFragment.setArguments(args);
dialogFragment.show(getActivity().getSupportFragmentManager(), TAG_DIALOG_ERROR);
}
public static class ErrorDialogFragment extends DialogFragment {
public ErrorDialogFragment() {
}
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
// Get the error code and retrieve the appropriate dialog
int errorCode = this.getArguments().getInt(ARGS_DIALOG_ERROR);
return GoogleApiAvailability.getInstance().getErrorDialog(
this.getActivity(),
errorCode,
REQUEST_RESOLVE_ERROR);
}
@Override
public void onDismiss(DialogInterface dialog) {
mResolvingError = false; // DOES NOT COMPILE
}
}
}
ここで何をすればいいですか?
ErrorDialogFragment
非静的にすると、コンパイル エラーが発生します。
このフラグメントの内部クラスは静的である必要があります (GoogleFragment.ErrorDialogFragment)
静的にしておくと、変数にもアクセスできません。
私の問題の2つの回避策を考えています:
- カスタムを
LocalBroadcastManager
送信するために使用するIntent
ErrorDialogFragment
GoogleFragment
- でカスタム メソッドを定義し
GoogleFragment
、getSupportFragmentManager().findFragmentByTag()
しかし、もっと簡単な解決策はありますか?
アップデート:
フィールドを publicに変更し、次のmResolvingError
コードを試しました。
@Override
public void onDismiss(DialogInterface dialog) {
GoogleFragment f = (GoogleFragment) getActivity().getSupportFragmentManager().findFragmentByTag(GoogleFragment.TAG);
if (f != null && f.isVisible()) {
f.mResolvingError = false;
}
}
しかし、これを適切にテストする方法がわかりませんf.isVisible()
。必要な場合は...
更新 2:
たぶん、コードでGoogleApiAvailability.getInstance().getErrorDialogでDialogInterface.OnDismissListenerを使用する必要がありますか?