在一项活动中按下手机后退按钮可进入另一项尚未在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>
我会尽我所能打破的东西,并按照活动流程:
你推出以及根活动
LoginActivity
(从你manifest
文件)。然后,从
LoginActivity
您输入到SignUpActivity
,无论是与一些UI操作或以编程(假设LoginActivity
未完成)。从
SignUpActivity
您输入到UserProfileActivity
。 (完成SignUpActivity
,即SignUpActivity
从背部堆叠中移除)。现在你在
UserProfileActivity
并从那里按回按钮带你到LoginActivity
因为SignUpActivity
已经从回栈中删除。但是,你说,你在
PartyListActivity
只有当你以编程方式从LoginActivity
开始它时才会发生。
看着你LoginActivity,意想不到的活动是从那里开始。
更多关于Tasks and Back Stack。
您可以指定在AndroidManifest.xml中活动的定义是 “parentActivityName” 属性。您在SignUpActivity的定义中是否有这样的属性?
有关此属性以及围绕背堆栈导航的其他信息的完整文档,请访问https://developer.android.com/training/implementing-navigation/temporal.html。
纠正我,如果我错了,但从我读的我认为你说要设置parentActivityName要么退出应用程序或转到PartyListActivity?无论哪种方式,我不想手动设置。如果我在UserProfileActivity中,并且所有导向该工具的活动都使用了'finish()',我想知道为什么按下后退按钮时PartyListActivity会在后台堆栈中。 – Michael
选项1:在UserProfileActivity完成后启动PartyListActivity并没有任何意义。以某种方式配置或调用该活动。仔细检查你的代码。
选项2:努力完成UserProfileActivity活动本身onBackPress()(即使它会完成)
@Override
public void onBackPressed() {
super.onBackPressed();
finish();
}
你什么时候打电话给PartyListActivity?请给我看看你的清单! – redAllocator
您可以使用adb打印活动backstack'adb shell dumpsys活动包' –
@redAllocator我在其他方法中调用PartyListActivity。但是在我正在复制的情况下,这些方法从未被称为。 AyushKhare什么时候可以运行? – Michael