[英]Android Studio, Passing 1 ArrayList between 2 Activites
[英]How do Activites follow eachother on Android studio?
因此,我也尝试学习一些Android Dev,并将数据保存到sql,并尝试在注册时保存数据,但是当数据成功时,它将加载其他活动,而不是main活动,这是我的代码。 我希望我的方法onSignupSuccess
打开MainActivity.class我没有收到任何错误,而是打开了
DisplayLogoActivity"
表现
<activity android:name=".activities.DisplayLogoActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
android:name=".activities.MainActivity"
android:screenOrientation="portrait" />
<activity
android:name=".activities.LoginActiviy"
android:screenOrientation="portrait"
android:theme="@style/AppTheme.Dark" />
<activity
android:name=".activities.SignupActivity"
android:screenOrientation="portrait"
android:theme="@style/AppTheme.Dark" />
我的onSignupSuccess方法
public void onSignupSuccess(int userId) {
signUpBT.setEnabled(true);
Session session = new Session(getBaseContext());
session.setuserId(userId);
setResult(RESULT_OK, null);
finish();
}
我的主要活动
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Session session = new Session(getBaseContext());
if (session.getuserId() == 0) {
startActivity(new Intent(this, LoginActivity.class));
}
我的会议
public class Session {
private SharedPreferences prefs;
public Session(Context cntx) {
prefs = PreferenceManager.getDefaultSharedPreferences(cntx);
}
public void setuserId(int userId) {
prefs.edit().putInt("userId", userId).commit();
}
public int getuserId() {
return prefs.getInt("userId", 0);
}
public void logout() {
prefs.edit().remove("userId").commit();
}
}
您正在DisplayLogoActivity上启动LoginActivity,当您完成LoginActivity时,Android将弹出“活动堆栈”,因此,将显示的活动为DisplayLogoActivity。
为了解决这个问题,您可以使用startActivityForResult启动LoginActivity等待结果,并且在收到结果后(如果可以)启动MainActivity,或者如果用户未登录则执行任何操作。
另一种方法是在DisplayLogoActivity而不是Login上启动MainActivity。 并使用此代码,检查在创建MainActivity时是否已登录用户,以启动(或不启动)LoginActivity。
要了解完整情况,
如果您有活动A(DisplayLogoActivity),B(LoginActivity),C(MainActivity)
而且,如果您在B活动上调用finish()方法,则该活动将从历史记录堆栈中消失,并且在调用finish()的活动之前打开的最后一个活动将被打开。
所以就你而言
您有三种方法可以解决此问题(两种方法来自@Massita),另一种方法是从A启动B活动时也调用finish()方法,如下所示:
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.