Как остановить MainActivity от первого вызова? - PullRequest
0 голосов
/ 12 марта 2019

В моем файле AndroidManifest.xml у меня есть два действия:

<activity android:name=".activities.LoginActivity"/>
<activity android:name=".activities.MainActivity">
    <intent-filter>
        <action android:name="android.intent.action.MAIN" />
        <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>
</activity>

В соответствии с логикой моего приложения, если я вошел в систему, я перенаправлен непосредственно на MainActivity,в противном случае до LoginActivity.В первый раз, когда я открываю приложение, LoginActivity открывается, но на заднем плане также вызывается MainActivity.Как остановить это?Но не сделав LoginActivity основным видом деятельности?

Ответы [ 2 ]

6 голосов
/ 12 марта 2019

Решение, которое я всегда принимаю, заключается в создании третьего занятия SplashScreenActivity

    <activity
        android:name=".activities.SplashScreenActivity"
        android:theme="@style/SplashTheme">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>

Это не что иное, как загрузка действий, где вы можете создать экземпляр всего, что вам нужно в приложении, и где вы можете сделать эту логику.

Вы можете, например, назвать это в SplashActivity OnCreate:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    if(/*logics to see if user is logged*/) {
      startActivity(SplashScreenActivity.this, MainActivity.class);
    }
    else {
      startActivity(SplashScreenActivity.this, LoginActivity.class);
    }
    finish(); //finish the splash activity.
}

Еще один маленький трюк:)

Ссылка от PPartisan в комментарии: Как реализовать SplashScreen

Я всегда делаю это activity Без макета , чтобы у вас не было этой надоедливой "черной вспышки экрана" при первом запуске приложения. Чтобы сделать это, как вы можете видеть, я указал theme в манифесте этого действия, где я simply установил это:

<style name="SplashTheme" parent="AppTheme">
    <item name="android:windowBackground">@drawable/background_splash</item>
</style>

, где этот ресурс - не что иное, как drawable с background (например, белым фоном и логотипом в центре).

Таким образом, у вас не будет этой черной вспышки при запуске приложения.

Удачи!

0 голосов
/ 12 марта 2019

Вы должны переместить следующий код в свое действие входа в систему, но LoginActivity будет основным действием:

<intent-filter>
        <action android:name="android.intent.action.MAIN" />
        <category android:name="android.intent.category.LAUNCHER" />
</intent-filter>

Вы также можете использовать одно действие с фрагментами внутри и выбрать, какой фрагмент отображать пользователю в соответствии сстатус входа.См. https://developer.android.com/guide/components/fragments

Наконец, как уже упоминалось в комментариях, вы можете создать заставку, которая проверяет, вошел ли пользователь в систему. Но опять же, заставка будет вашей основной деятельностью.См https://android.jlelse.eu/right-way-to-create-splash-screen-on-android-e7f1709ba154

Лучший

...