2013-11-26 8 views
0

У меня есть MenuActivity с кнопками «новая игра» и «резюме». «Новая игра» запускает FireRoomActivity.Возобновляемая деятельность от другой деятельности

public void newGame(View view){ 
     Intent intent = new Intent(this, FireRoomActivity.class); 
     this.finish(); 
     startActivity(intent); 
    } 

В FireRoomActivity onBackPressed является переопределенным вернуться к MenuActivity.

@Override 
public void onBackPressed() { 
    super.onBackPressed(); 
    Intent inMain=new Intent(this, MenuActivity.class); 
    startActivity(inMain); 
} 

Кнопка «резюме» в MenuActivity должна возобновить FireRoomActivity. Но это просто завершает работу приложения.

public void resume(View view){ 
    this.finish(); 
} 

Q1) Что я делаю неправильно?

Q2) Если я добавлю третью активность «Три Активности» и начну ее с FireRoomActivity (заканчивая FireRoomActivity), и в этом «ThreeActivity» переопределите onBackPressed, чтобы перейти в MenuActivity, как бы я это сделал?

Я новичок в андроид жизненного цикла, так что я был бы признателен за подробный ответ

+0

активность будет следовать за свой жизненный цикл, так что вы не можете позвонить onResume непосредственно. Он сначала вызовет onRestart при поступлении из другой активности, а затем последует другие методы. – Sameer

ответ

1
**Try This** 
====================== 
public void onBackPressed() { 
Intent i = new Intent(getApplicationContext(), MenuActivity.class); 
      i.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
      i.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP); 
      startActivity(i); 
      finish(); 
} 
0

Try:

@Override 
public void onBackPressed() { 
    Intent inMain=new Intent(this, MenuActivity.class); 
    startActivity(inMain); 
} 

onBackPressed() сам завершает деятельность. В этом случае, если вы нажмете кнопку «Назад» в FireRoomActivity, она всегда будет приостанавливаться. Поэтому, если вы хотите закончить его, вам нужно будет называть finish();

0

Удалить super.OnBackPressed() in onBackПредусмотренный переопределенный метод.

Если это не работает, попробуйте следующее:

Начните FireRoomActivity с синтаксисом на щелканье резюме кнопки

Intent i = new Intent(getActivity(), FireRoomActivity.class); 
i.setFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT) 
startActivity(i); 
1

1) Вы Мессинг с естественным порядком. Нет необходимости называть «финиш» в методе «Новая игра».

Просто оставьте действие в стеке, чтобы вы могли вернуться к нему, когда вы нажмете обратно клавишу. Затем вам не нужно запускать новую активность, когда нажата клавиша «назад», потому что вы уже вернетесь к той, которую вы уже имеете.

Ваш метод возобновления вызывает завершение и, следовательно, закрытие меню. Вместо того, чтобы «закончить» меню, введите свой код, чтобы возобновить игру.

2) Изучите жизненный цикл деятельности. Как только вы поймете это, вы справитесь с этим гораздо лучше. Нет необходимости завершать работу, когда вы начинаете другую, если вы собираетесь вернуться к ней. Думайте о них как стек. Вы помещаете действия в стек, и кнопка назад снова отбрасывает их. Вы завершаете действие только после того, как закончите с ним, и больше не хотите его видеть.

+0

Я немного смущен.Если я не назову финиш в MenuActivity, FireRoomActivity будет в начале в стеке как таковой: **** FireRoomActivity, MenuActivity **** Затем, когда пользователь находится в FireRoomActivity и нажимает кнопку «Назад», FireRoomActivity необходимо завершить, чтобы MenuActivity вышла из стека. Затем, когда нажата кнопка возобновления, мне нужно возобновить FireRoomActivity, как мне это сделать? – Nazerke

+0

Вы не можете возобновить действие, которое завершено. Начните новую функцию FireRoomActivity, но включите Extras, которая сообщит, что она возобновит работу из сохраненного состояния. Держите ваш стек простым. У вас будут всевозможные проблемы, если вы будете манипулировать им так, как вы пытаетесь. Прежде всего, изучите жизненный цикл активности. Если бы вы это поняли, у вас не было бы этих проблем. – Kuffs

+1

Это может помочь, если вы попытаетесь не думать о своей деятельности в качестве постоянных игровых экранов. Это окна в вашу игру, через которые пользователь взаимодействует. Вы должны иметь возможность сохранять все состояние игры по запросу (например, когда пользователь приостанавливается), перезагрузите устройство, но при этом перезапустите свою игру в том же состоянии, в котором пользователь оставил ее. – Kuffs

0

Overide это в ThreeActivity

@Override 
public void onBackPressed() { 
    Intent intent=new Intent(this, MenuActivity.class); 
    startActivity(intent); 
} 

Для получения дополнительной информации о см this ссылка

Смежные вопросы