私のプロジェクトでは、アンドロイドのAACライブラリとAndroidのデータバインディングライブラリを使用しています。私はAuthActivityを持っており、AuthViewModelはアンドロイドのViewModelクラスを拡張しています。場合によっては、ViewModelのいくつかのメソッドを呼び出すためにActivityを要求する必要があります。 たとえば、GoogleAuthClientを初期化するためにViewModelに渡すことができないアクティビティコンテキストが必要なため、アクティビティクラスで初期化されたGoogle AuthまたはFacebook Authボタンをクリックすると、ビューモデルにアクティビティフィールドが保存されません。 Activityクラスに実装GoogleのAPIとFacebookのAPIを持つすべてのロジック:Android ViewModelコールアクティビティメソッド
//google api initialization
googleApiClient = new GoogleApiClient.Builder(this)
.enableAutoManage(this, this)
.addApi(Auth.GOOGLE_SIGN_IN_API, gso)
.build();
//facebook login button
loginButton.setReadPermissions(Arrays.asList("email", "public_profile"));
loginButton.registerCallback(callbackManager,
また、私はあまりにもActivityコンテキストを必要とする意図でコールサインをする必要があります。
Intent signInIntent = Auth.GoogleSignInApi.getSignInIntent(googleApiClient);
startActivityForResult(signInIntent, GOOGLE_AUTH);
私はFacebookのログインやGoogleを要求することはできませんログイン、またはstartActivityビューモデルクラスから意図ので、私はクラスのインターフェイスAuthActivityListenerを作成:
public interface AuthActivityListener {
void requestSignedIn();
void requestGoogleAuth();
void requestFacebookAuth();
void requestShowDialogFragment(int type);
}
でリスナーを実装アクティビティクラス:
AuthActivityRequester authRequestListener = new AuthActivityRequester() {
@Override
public void requestSignedIn() {
Intent intent = new Intent(AuthActivity.this, ScanActivity.class);
startActivity(intent);
AuthActivity.this.finish();
}
@Override
public void requestGoogleAuth() {
Intent signInIntent = Auth.GoogleSignInApi.getSignInIntent(googleApiClient);
startActivityForResult(signInIntent, GOOGLE_AUTH);
}
...
と活動のメソッドを呼び出すためにビューモデルクラスでこのリスナーを割り当てる:
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
callbackManager.onActivityResult(requestCode, resultCode, data);
if (requestCode == GOOGLE_AUTH) {
GoogleSignInResult result = Auth.GoogleSignInApi.getSignInResultFromIntent(data);
if (result.isSuccess()) {
GoogleSignInAccount acct = result.getSignInAccount();
if (acct != null) {
viewModel.onGoogleUserLoaded(acct.getEmail(), acct.getId());
} else {
viewModel.onGoogleUserLoaded("", "");
}
}
}
}
:
// in constructor
this.authRequester = listener;
// call activity method
public void onClickedAuthGoogle() {
authRequester.requestGoogleAuth();
}
GoogleやFacebookの認証通過した後、私は活動からのビューモデルメソッドを呼び出します
誰も私に説明できるのは、ビューモデルとアクティビティの間のこの通信方法が正しいか、ビューモデルからアクティビティメソッドを呼び出す別の方法を見つける必要があるかどうかです。
あなたはGoogleとFacebookのサインインのための適切なMVVM構造を見つけましたか?同じものを探しています。 – iMDroid