Я реализую заставку для приложения Android. Я хочу показывать заставку только один раз, когда приложение только что запущено. После того, как я сделал некоторую работу, я хочу перейти к приложению. Если затем пользователь нажимает кнопку «Назад», я не хочу, чтобы он возвращался к заставке, я просто хочу, чтобы приложение закрылось. Как я могу реализовать это наилучшим образом? Как очистить backstack первого действия.
Backstack заставки Android
Ответы (7)
Если вы хотите показывать заставку только в первый раз при запуске приложения, вы можете использовать приведенное выше решение общих настроек. Но я думаю, вы хотите пройти через следующие сценарии:
- Вы запускаете приложение, вы получаете заставку.
- Затем вы перемещаетесь по приложению.
- Затем вы попадаете на главный экран своего приложения.
- Затем вы хотите выйти, но появляется заставка.
Если у вас возникла эта проблема, вам нужно завершить заставку, когда вы начинаете домашнюю активность, а также в конце вам нужно выйти из системы или завершить домашнюю активность приложения. Также попробуйте android:launchMode="singleTask"
на вкладке активности заставки в манифесте Android.
Используйте общие настройки в Android и сохраните значение в первый раз.. со второго раза проверьте, присутствует ли значение, не отображайте заставку
Изменить для настроек следуйте это
Когда вы переходите ко второму действию после заставки, вызовите finish()
SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(this);
if (preferences.getBoolean("firstTime", true)) {
// Show splash screen
// Wait a few seconds.
} else {
// Nothing to do here. Go straight to the second activity.
}
SharedPreferences.Editor editor = PreferenceManager.getDefaultSharedPreferences(
getSupportActivity()).edit();
editor.putBoolean("firstTime", false);
editor.commit();
startActivity(MainActivity.this, ...)
finish();
Таким образом, когда пользователь нажимает назад, в стеке не будет никакой активности.
Привет, попробуйте этот код, он поможет вам, но он будет показывать всплеск всякий раз, когда вы открываете приложение.
public class spash_scr extends Activity {
ImageView t;
//LoginButton b;
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.spash_scr);
// bm1=drawable.shineme;
t = (ImageView) findViewById(R.id.textView1);
t.setImageResource(R.drawable.shineme);
RotateAnimation r = new RotateAnimation(0, 360,
Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF,
0.5f);
// r.setStartOffset(1000);
r.setDuration(2000);
r.setFillAfter(true);
t.startAnimation(r);
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
Intent i = new Intent(spash_scr.this, MainActivity.class);
startActivity(i);
finish();
}
}, 3000);
}
Вы не совсем поняли точное поведение, поэтому вот несколько вариантов:
О: Вы хотите, чтобы заставка показывалась каждый раз, когда задача (приложение) перезапускается, например, после перезагрузки телефона, закрытия задачи пользователем вручную или когда Android удаляет ее из-за проблем с памятью. (Обычно это используется для брендинга или лицензирования логотипов.) В таких случаях запустите заставку из onCreate() основного действия, затем завершите () экран-заставку, чтобы позволить пользователю вернуться к основному виду. Таким образом, навигация назад не вернет активность всплеска, поскольку ее больше нет в стеке навигации.
B: Вы хотите, чтобы заставка показывалась при первом запуске приложения после установки, но никогда больше. (Обычно используется для просмотра справки «Добро пожаловать» или «Начало работы».) Используйте параметр SharedPreference, как описано в других ответах здесь или в Использование общих настроек. В случае, если он должен показывать заставку, я по-прежнему предлагаю вариант А для простейшего способа не показывать заставку снова после того, как она будет закрыта после первого запуска.
C: Еще более неизвестная сложная навигация? Узнайте о задачах и обратном стеке, и вы сможете это сделать делай почти все, что хочешь.
После открытия нового действия this.finish ();
вы должны сделать
Intent intent = new Intent(this, HomeActivity.class);
startActivity(intent);
this.finish ();
Для этого вы должны использовать SharedPreferences ,
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
if(!prefs.getBoolean("first_time", false))
{
SharedPreferences.Editor editor = prefs.edit();
editor.putBoolean("first_time", true);
editor.commit();
Intent i = new Intent(splash.this, otherSplash.class);
this.startActivity(i);
this.finish();
}
else
// Not firsttime Direct it as you wish
}