按后退按钮显示相同的活动

时间:2017-06-05 12:25:45

标签: java android android-activity android-xml

我有两项活动。

  1. LoginActivity
  2. 主屏幕
  3. 我也有这个设置的启动画面:

    <activity android:name=".SplashScreen"
                android:theme="@style/AppTheme.NoActionBar"
                android:noHistory="true">
                <intent-filter>
                    <action android:name="android.intent.action.MAIN" />
    
                    <category android:name="android.intent.category.LAUNCHER" />
                </intent-filter>
    </activity>
    

    然后,启动画面使用以下代码将用户转移到HomeScreen:

    Intent intent = new Intent(SplashScreen.this, HomeScreen.class);
    

    在HomeScreen活动中,我检查用户是否已登录。如果他没有登录,我会将他转到LoginActivity:

     mAuthListener = new FirebaseAuth.AuthStateListener() {
                @Override
                public void onAuthStateChanged(FirebaseAuth firebaseAuth) {
                    if(firebaseAuth.getCurrentUser() == null)
                    {
                        Intent intent = new Intent(HomeScreen.this,LoginActivity.class);
                        Toast.makeText(HomeScreen.this,"H>L on no login",Toast.LENGTH_LONG).show(); //toast to show me why my app is in infinite loop
                        startActivity(intent);
                    }
                }
            };
    

    在LoginActivity上,我有一个使用FireBase Google身份验证的简单登录按钮。另外,我检查用户是否已经登录,如果是,他将被转移到HomeScreen Activity:

    mAuthListener = new FirebaseAuth.AuthStateListener() {
                @Override
                public void onAuthStateChanged(@NonNull FirebaseAuth firebaseAuth) {
                    if(firebaseAuth.getCurrentUser() != null)
                    {
                        Intent intent = new Intent(LoginActivity.this,HomeScreen.class);
                        Toast.makeText(LoginActivity.this,"L>H already signed in",Toast.LENGTH_LONG).show();
                        startActivity(intent);
                    }
                }
            };
    

    而且,还有:

    private void firebaseAuthWithGoogle(GoogleSignInAccount acct) {
            Log.d(TAG, "firebaseAuthWithGoogle:" + acct.getId());
    
            AuthCredential credential = GoogleAuthProvider.getCredential(acct.getIdToken(), null);
            mAuth.signInWithCredential(credential)
                    .addOnCompleteListener(this, new OnCompleteListener<AuthResult>() {
                        @Override
                        public void onComplete(@NonNull Task<AuthResult> task) {
                            if (task.isSuccessful()) {
                                Intent intent = new Intent(LoginActivity.this,HomeScreen.class);
                                Toast.makeText(LoginActivity.this,"L>H on login",Toast.LENGTH_LONG).show();
                                startActivity(intent);
                            } else {
                                // If sign in fails, display a message to the user.
                                Log.w(TAG, "signInWithCredential:failure", task.getException());
                                Toast.makeText(LoginActivity.this, "Authentication failed.",
                                        Toast.LENGTH_SHORT).show();
                            }
                        }
                    });
        }
    

    现在,问题是:当我打开应用程序时,我会看到启动画面,然后转移到“登录”页面。然后当我按回来时,我得到登录页面而不是退出应用程序。此外,一旦我进入:我得到了闪屏,我被带到了HomeScreen。然后,如果我按回来,我将被带到HomeScreen AGAIN,而不是退出应用程序。

    请帮帮我。我搜索了StackOverflow,但并没有到达任何地方。任何帮助表示赞赏。如果您需要更多信息,请向我询问更新! :)

4 个答案:

答案 0 :(得分:0)

我不确定它是否正确,请尝试,

不要从startActivity(new Intent(HomeScreen.this,LoginActivity.class))调用onAuthStateChanged(),只需调用finish()即可。希望它可以帮助你。

答案 1 :(得分:0)

简单地这样做。

       img.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            finish();
        }
    });

答案 2 :(得分:0)

您需要实现onBackPressed(),默认情况下您的应用应退出。但是,要退出您的应用,您可以使用

getActivity.finish();

finishAndRemoveTask(); - 它完成所有活动并将其从最近的任务列表中删除

答案 3 :(得分:0)

好的,我找到了解决方案。除了下面的宝贵回复之外,还有必要在意图中添加一个标记FLAG_ACTIVITY_CLEAR_TOP。

这是工作代码:

public void onComplete(@NonNull Task<AuthResult> task) {
                    if (task.isSuccessful()) {
                        Intent intent = new Intent(LoginActivity.this,HomeScreen.class);
                        Toast.makeText(LoginActivity.this,"L>H on login",Toast.LENGTH_LONG).show();
                        intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
                        startActivity(intent);
                        finish();
                    } else {
                        // If sign in fails, display a message to the user.
                        Log.w(TAG, "signInWithCredential:failure", task.getException());
                        Toast.makeText(LoginActivity.this, "Authentication failed.",
                                Toast.LENGTH_SHORT).show();
                    }
                }