簡體   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