繁体   English   中英

Activites如何在Android Studio上互相关注?

[英]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()方法,如下所示:

  1. 打开DisplayLogoActivity
  2. 从DisplayLogoActivity启动活动LoginActivity并调用FINISH()
  3. 如果是,则在LoginActivity上检查该用户的OK数据是否正确,然后启动Activity MainActivity并调用FINISH()

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM