在一项活动中按下手机后退按钮可进入另一项尚未在Android之前初始化的活动

在一项活动中按下手机后退按钮可进入另一项尚未在Android之前初始化的活动

问题描述:

这与所有“给我的类似”问题都非常不同。我工作的一个应用程序,当用户注册后在一个活动的帐户称为SignUpActivity,我带他们去使用下面的代码的另一项活动叫UserProfileActivity:在一项活动中按下手机后退按钮可进入另一项尚未在Android之前初始化的活动

SignUpActivity:

Intent userProfileIntent = new Intent(SignUpActivity.this, UserProfileActivity.class); 
startActivity(userProfileIntent); 
finish(); 

现在,在UserProfileActivity中,如果我按下后退按钮,它会将我带到一个活动,该活动在应用程序生命期内从未被访问/实例化,名为PartyListActivity。

UserProfileActivity:

public class UserProfileActivity extends AppCompatActivity { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_user_profile); 
     Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 
     setSupportActionBar(toolbar); 

     FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab); 
     fab.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG) 
         .setAction("Action", null).show(); 
      } 
     }); 
    } 

} 

所以我的问题是为什么,当我按回到UserProfileActivity,它回去PartyListActivity,当我从来没有对PartyListActivity过吗?清单文件中是否存在指示此行为的内容?

编辑

的AndroidManifest.xml:

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    package="com.sample.package"> 

    <!-- To auto-complete the email text field in the login form with the user's emails --> 
    <uses-permission android:name="android.permission.GET_ACCOUNTS" /> 
    <uses-permission android:name="android.permission.READ_PROFILE" /> 
    <uses-permission android:name="android.permission.READ_CONTACTS" /> 

    <application 
     android:allowBackup="true" 
     android:icon="@mipmap/ic_launcher" 
     android:label="@string/app_name" 
     android:roundIcon="@mipmap/ic_launcher_round" 
     android:supportsRtl="true" 
     android:theme="@style/Theme.AppCompat.Light.NoActionBar"> 
     <activity 
      android:name=".LoginActivity" 
      android:label="@string/app_name"> 
      <intent-filter> 
       <action android:name="android.intent.action.MAIN" /> 

       <category android:name="android.intent.category.LAUNCHER" /> 
      </intent-filter> 
     </activity> 
     <activity 
      android:name=".SignUpActivity" 
      android:label="@string/title_activity_sign_up" /> 
     <activity 
      android:name=".PartyListActivity" 
      android:label="@string/title_activity_party_list" 
      android:theme="@style/AppTheme.NoActionBar" /> 
     <activity 
      android:name=".UserProfileActivity" 
      android:label="@string/title_activity_user_profile" 
      android:theme="@style/AppTheme.NoActionBar" /> 
     <activity 
      android:name=".FriendsActivity" 
      android:label="@string/title_activity_friends" 
      android:theme="@style/AppTheme.NoActionBar" /> 
    </application> 

</manifest> 
+0

你什么时候打电话给PartyListActivity?请给我看看你的清单! – redAllocator

+0

您可以使用adb打印活动backstack'adb shell dumpsys活动包' –

+0

@redAllocator我在其他方法中调用PartyListActivity。但是在我正在复制的情况下,这些方法从未被称为。 AyushKhare什么时候可以运行? – Michael

我会尽我所能打破的东西,并按照活动流程:

  • 推出以及活动LoginActivity
    (从你manifest文件)。

  • 然后,从LoginActivity您输入到SignUpActivity,无论是与一些UI操作或以编程(假设LoginActivity未完成)。

  • SignUpActivity您输入到UserProfileActivity。 (完成SignUpActivity,即SignUpActivity从背部堆叠中移除)。

  • 现在你在UserProfileActivity并从那里按回按钮带你到LoginActivity因为SignUpActivity已经从回栈中删除。

  • 但是,你说,你在PartyListActivity只有当你以编程方式从LoginActivity开始它时才会发生。

看着你LoginActivity,意想不到的活动是从那里开始。

更多关于Tasks and Back Stack

+0

就是这样。我从我的活动返回到登录活动。然后它会检查我是否仍然登录Gmail。如果我是,它启动启动PartyListActivity的意图。我还没有尝试过,但这应该是什么导致这个问题。我很快就会接受答案!谢谢 – Michael

+0

在LoginActivity启动'PartyListActivity'后破坏'LoginActivity'可能会解决您的问题。 – Journey

您可以指定在AndroidManifest.xml中活动的定义是 “parentActivityName” 属性。您在SignUpActivity的定义中是否有这样的属性?

有关此属性以及围绕背堆栈导航的其他信息的完整文档,请访问https://developer.android.com/training/implementing-navigation/temporal.html

+0

纠正我,如果我错了,但从我读的我认为你说要设置parentActivityName要么退出应用程序或转到PartyListActivity?无论哪种方式,我不想手动设置。如果我在UserProfileActivity中,并且所有导向该工具的活动都使用了'finish()',我想知道为什么按下后退按钮时PartyListActivity会在后台堆栈中。 – Michael

选项1:在UserProfileActivity完成后启动PartyListActivity并没有任何意义。以某种方式配置或调用该活动。仔细检查你的代码。

选项2:努力完成UserProfileActivity活动本身onBackPress()(即使它会完成)

@Override 
    public void onBackPressed() { 
     super.onBackPressed(); 
     finish(); 
    }