SplashScreen каждый раз, когда я снова на MainActivity

java android splash-screen

125 просмотра

5 ответа

7347 Репутация автора

Я использую этот код на MainActivity для заставки, которая отлично работает

final ImageView splash1 = (ImageView) this.findViewById(R.id.splash);

    new Handler().postDelayed(new Runnable(){
        @Override
        public void run() {
            splash1.setVisibility(View.GONE);
        }
    }, 1000);

но каждый раз, когда я возвращаюсь в MainActivity (где находится главное меню), заставка снова появляется. Есть ли способ продолжать использовать этот код, и просто добавив условие if, не увидим splashScreen после первого раза? (например: переменная, которая изменяется при загрузке приложения) Заранее спасибо

Автор: Joe Источник Размещён: 18.07.2016 06:58

Ответы (5)


-1 плюса

3170 Репутация автора

использовать finish()после запуска SplashScreenActivity

Автор: Sathish Kumar J Размещён: 18.07.2016 06:59

-1 плюса

2622 Репутация автора

РЕДАКТИРОВАТЬ:

Еще один подход может быть - создать переменную логического уровня приложения (установленную в false), расширив Applicationкласс и затем проверив его в runметоде - если false, тогда показать всплеск и установить его в true, чтобы он не выполнялся снова.

public class DefaultApplication extends Application {
  private boolean isSplashDisplayed = false;

  public boolean isSplashDisplayed() {
     return isSplashDisplayed ;
  }

  public void setIsSplashDisplayed(boolean isSplashDisplayed) {
     this.isSplashDisplayed = isSplashDisplayed;
  }
}

Второй подход. Лучше создать отдельное действие для Splash, затем вызвать MainActivity из SplashActivity и завершить SplashActivity.

   new Handler().postDelayed(new Runnable() {
        @Override
        public void run() {
            Intent i = new Intent(SplashScreen.this, MainActivity.class);
            startActivity(i);
            finish();
        }
    }, 1000);

Также нужно сделать свою SplashActivity как лаунчер

    <activity
        android:name=".SplashActivity"
        android:label="@string/title_activity_splash_screen" >>     
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />>     
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    < /activity>
Автор: Arjit Размещён: 18.07.2016 07:06

1 плюс

2146 Репутация автора

Используйте 2 различных действия SplashActivity и MainActivity.

Ваша деятельность "Всплеск" должна быть ОСНОВНОЙ. Поэтому измените файл AndroidManifest следующим образом ...

<application
    android:allowBackup="true"
    android:icon="@mipmap/ic_launcher"
    android:label="@string/app_name"
    android:supportsRtl="true"
    android:theme="@style/AppTheme">
    <activity android:name=".MainActivity">
    </activity>

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

И перейдите к MainActivity из SplashActivity через несколько секунд. Используйте этот код в SplashActivity.

Handler hadler=new Handler();
        hadler.postDelayed(new Runnable() {
            @Override
            public void run () {
                finish();
                Intent i = new Intent(context, MainActivity.class);
                startActivity(i);
            }
        }, 3000);

здесь 3000 используется в течение 3 секунд. Автоматический запуск MainActivity через 3 секунды. Надеюсь, это поможет.

Автор: user392117 Размещён: 18.07.2016 07:06

0 плюса

157 Репутация автора

Используйте отдельное действие для заставки, после этого перейдите к MainActivity, не забудьте использовать finish () в активности на заставке.

Эта ссылка может помочь вам

http://androidexample.com/Splash_screen_-_Android_Example/index.php?view=article_discription&aid=113&aaid=135

Автор: Prakash Bala Размещён: 18.07.2016 07:06

0 плюса

7294 Репутация автора

Просто создайте одну переменную, чтобы узнать, отображается она или нет.

class YourActivity extends Activity {

    boolean isDisplayed;

    @Override
    protected void onStart() {
        if (!isDisplayed) {
            new Handler().postDelayed(new Runnable() {
                @Override
                public void run() {
                    isDisplayed = true;
                    splash1.setVisibility(View.GONE);
                }
            }, 1000);

        } else {
            splash1.setVisibility(View.GONE);
        }
    }
}
Автор: Bharatesh Размещён: 18.07.2016 07:24
Вопросы из категории :
32x32