2017-01-13 2 views
0

私は2つの活動、LoginActivityMainActivityを持っています。最初のアクティビティでは、ユーザーにログインして、彼をMainActivityにリダイレクトします。 、ログイン中のユーザーならば、私はチェックし、それがログインしていた場合は、ユーザーがアプリを起動するたびにAndroidで別のアクティビティを呼び出さずにアクティビティを開始するにはどうすればよいですか?

private void signOut() { 
    Auth.GoogleSignInApi.signOut(googleApiClient).setResultCallback(new ResultCallback<Status>() { 
     @Override 
     public void onResult(Status status) { 
      Intent intent = new Intent(MainActivity.this, LoginActivity.class); 
      intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK); 
      startActivity(intent); 
     } 
    }); 
} 

:。私はまた、MainActivityにこのサインアウトメソッドを呼び出しサインアウトボタンを作成していますMainActivityに残り、それ以外の場合はLoginActivityにリダイレクトされます。 問題は、ユーザーがログインしていないときは、まずアプリケーションがMainActivityを開始し、その後にLoginActivityが起動するということです。ユーザーがMainActivityを開かずに、ログインしていないとき、

<activity android:name=".MainActivity"> 
     <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 
      <category android:name="android.intent.category.LAUNCHER" /> 
     </intent-filter> 
    </activity> 
<activity android:name=".LoginActivity" /> 

がどのように私は、アプリを起動することができます。

は、これは私のAndroidManifestがどのように見えるかですか?

+0

あなたが最初に私はちょうど 'MainActivity'最初にこれを試してみましたし、開始の代わりにチェックし、メイン –

答えて

2

以下のような新しい活動のテーマを変更するには、MainLayoutLoginLayoutは、MainLayoutユーザーがあれば隠す言いますログインしていない同じアクティビティに、つまりと表示し、ユーザにログインさせてからLoginLayoutを再度非表示にしてMainLayoutと表示します。または、LoginLayoutを隠すのではなく、アクティビティを再開します。

onCreate()の先頭にif-elseの文を挿入します。 (あなたのonCreateMainActivityの中に)ややこのような

//Initially, have your LoginLayout GONE and MainLayout VISIBLE 
if (!isUserLoggedIn) { 
    MainLayout.setVisibility(View.GONE); 
    LoginLayout.setVisibility(View.VISIBLE); 
    /* 
    Code to get user logged in, 
    then restart activity, 
    or simply hide LoginLayout and show MainLayout 
    */ 
} 
+0

これは私にとって正しい答えです。ユーザーがログインしていないときに、他のアクティビティを開かずに私のアプリを見つめている。ありがとう! –

+0

@AlexM。これについては別の方法があります。つまり、アプリの起動時にスプラッシュ画面を起動し、ユーザーがログインしているかどうかを確認し、適切なアクティビティを開始します。 –

2

実際の起動アクティビティである3つ目のアクティビティを作成します。次に、次のものを決定するだけです。

@Override 
public void onCreate(Bundle si) { 
    ... 
    if (isLoggedIn()) { 
     goToMain(); 
    } else { 
     goToLogin(); 
    } 

    finish(); 
} 

これは、どこに行くかを決定するアクティビティを開きます。アクティビティが読み込まれると、画面にわずかなフラッシュが表示されることがあります。スタイリングについての説明はtransparent activityです。 `

+0

にログイン後、loginactivityを開始し、間違っていますLaunchActivityが始まります。これは空白です。別の考えがありますか? –

+0

それはあなたがそれを行う方法です。 Androidはあなたのユーザーがログインしているかどうかは分かりません。あなたはその決定を下す必要があります。 LaunchActivityのスタイルを変更すると透明になります。そのため、フラッシュの短いミリ秒がありません。 – DeeV

+0

透明なアクティビティを作成する方法。 http://stackoverflow.com/questions/2176922/how-to-create-transparent-activity-in-android – DeeV

0

意思決定コードを3番目のアクティビティに移動し、新しい開始アクティビティとして設定します。

 if (condition1) { 
     startActivity(intent1); 
    } 
    else { 
     startActivity(intent2); 
    } 

そして、私は最高の状態で何ができるかMainActivityに2つのレイアウトを持っていると思う

android:theme="@android:style/Theme.NoDisplay 
+0

私はこれを試して、MainActivityを最初に起動するのではなく、LaunchActivityを開始します。これは空白です。別の考えがありますか? –

関連する問題