这与所有类似的"非常不同。 SO给了我的问题。我正在开发一个应用程序,当用户在一个名为SignUpActivity的活动中注册一个帐户时,我会使用以下代码将它们带到另一个名为UserProfileActivity的活动中:
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 :(得分:1)
我会尽力打破这些东西并遵循活动流程:
启动以及 root 活动为LoginActivity
(来自您的manifest
文件)。
然后,从LoginActivity
您输入SignUpActivity
,使用某些UI操作或以编程方式(假设LoginActivity
未完成)。
从您输入的SignUpActivity
UserProfileActivity
开始。 (完成SignUpActivity
,即SignUpActivity
从后栈中删除。
现在您已经进入UserProfileActivity
并从那里按回按钮会将您带到LoginActivity
,因为SignUpActivity
已从后堆栈中删除。
但是你说,你在PartyListActivity
,只有当你从LoginActivity
以编程方式启动它时才会发生这种情况。
查看 LoginActivity ,意外活动就是从那里开始的。
有关Tasks and Back Stack的更多信息。
答案 1 :(得分:0)
您可以在AndroidManifest.xml中的活动定义中指定“parentActivityName”属性。您在SignUpActivity的定义中是否有这样的属性?
有关此属性的完整文档以及有关后台堆栈导航的其他信息,请访问https://developer.android.com/training/implementing-navigation/temporal.html。
答案 2 :(得分:0)
选项1:在UserProfileActivity完成后启动PartyListActivity是没有意义的。在某处你以某种方式配置或调用该活动。仔细检查您的密码。
选项2:尝试在onBackPress()上完成UserProfileActivity活动(即使它会完成)
@android:dimen/value