web-dev-qa-db-ja.com

すでにログインしている場合、ログインアクティビティを適切にスキップする

ランチャーアイコンが現在ログインアクティビティを開始しています。ログインステータスをSharedPreferencesに保存しました。 適切にログインアクティビティをスキップしてany UIグリッチなしでメインアクティビティに直接進む方法はありますか? finish()onCreate()を含む既存のすべてのソリューションでは、ログインアクティビティのタイトルが一時的に表示されたり、その他の短い空白の画面UIの不具合が発生したりします。

28
Monstieur

MainActivityまたはLoginActivityを開くことを決定するUIのない​​ランチャーアクティビティを用意します。あなたはUIなしで宣言することができます:

Android:theme="@Android:style/Theme.NoDisplay"

他の2つの可能な解決策:

MainActivityをランチャーにして、ユーザーがログインしているかどうかを確認するようにします。そうでない場合は、loginActivityにリダイレクトします。

別の方法は、フラグメントを操作することです。 mainFragmentとloginFragmentの両方をロードできる基本アクティビティーがあります。参考: https://developer.Android.com/training/basics/fragments/index.html

40
wvdz

ユーザーのユーザー名とパスワードがすでにSharedPreferencesにあるかどうかを確認し、存在しない場合はアクティビティを開始する基本アクティビティを作成できます。

例:

public class BeanStalkBaseActivity extends SherlockActivity{

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    setContentView(R.layout.activity_main);


    if(SavedPreference.getUserName(this).length() == 0)
    {
        Intent intent = new Intent(this,LoginActivity.class);
        intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
        finish();
        startActivity(intent);
    }else
    {
        Intent intent = new Intent(this,MainActivity.class);
        intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
        finish();
        startActivity(intent);
    }

}

}

BeanStalkBaseActivityはチェッカーとしてのみ機能するため、ランチャーにする必要があります。

2
Rod_Algonquin

ユーザーがメインアクティビティまたは現在のアクティビティ内で既にログインしているかどうかを確認し、ログインしている場合に別のアクティビティに切り替えると、UIの不具合が発生します。その後、ターゲットアクティビティに切り替わります。

あなたはこれを次のように行うことができます:

  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    mAuth = FirebaseAuth.getInstance();
    if (mAuth.getCurrentUser() != null) {

        Toast.makeText(MainActivity.this, "Already Logged In", 
        Toast.LENGTH_LONG).show();
        Intent intent = new Intent(MainActivity.this, Home.class);
        intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
        startActivity(intent);

    } else {
        getWindow().requestFeature(Window.FEATURE_NO_TITLE);
        getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, 
        WindowManager.LayoutParams.FLAG_FULLSCREEN);

        setContentView(R.layout.activity_main);

        BtnSignUp = findViewById(R.id.btnSignUp);
        BtnLogIn = findViewById(R.id.btnLogIn);


        BtnSignUp.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                Intent signUp = new Intent(MainActivity.this, SignUpActivity.class);
                startActivity(signUp);

            }
        });

        BtnLogIn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                Intent logIn = new Intent(MainActivity.this, Login.class);
                startActivity(logIn);
            }
        });
    }
}
1
Bhawna

また、スプラッシュスクリーンアクティビティ中にログインステータスがあるかどうかを確認することもできます。スプラッシュ画面は、アプリの読み込み時にアプリが停止していないことをユーザーに知らせるのに最適であり、アプリを適切な画面にリダイレクトするためにも使用できます。

私は初めてこの素晴らしいガイドに従ってガイドを作成しました: https://www.bignerdranch.com/blog/splash-screens-the-right-way/

0
Ben

メインアクティビティで、ユーザーがnullでないかどうかを確認してから、家を起動します

firebaseAuth = FirebaseAuth.getInstance();

FirebaseUser user = firebaseAuth.getCurrentUser();

if (user != null) {
    finish();
    startActivity(new Intent(MainActivity.this, UserHomeActivity.class));
}
0
user2784855