Закрытие предыдущих страниц в приложении
Я делаю приложение, которое содержит около 5 страниц вместе с начальным экраном, я знаю, что если я напишу finish()
в методе onPause()
, страница будет уничтожена после перехода пользователя на следующую страницу.
Мое требование таково, что я не хочу, чтобы AppPage 1 был уничтожен до тех пор, пока я не дойду до третьей страницы приложения, но как только пользователь перейдет на 4-ю страницу приложения, я хочу уничтожить все 1, 2,3 Приложения моего приложения, чтобы они не могли быть доступны, нажав кнопку "Назад" и дойдя до начального экрана моего приложения, которое я не убиваю при запуске приложения.
Итак, я хочу спросить, можно ли убить мое приложение 1,2,3 страницы, когда пользователь нажимает кнопку перехода на следующую страницу третьей страницы.
Спасибо
==== Редактировать =====
Начальный экран → AppPage1 → AppPage2 → AppPage3 → AppPage4 (здесь можно убить AppPage1,2,3, чтобы при нажатии на клик пользователь дошел до sceen) → Appage 5 (Kill AppPage4)
==== Редактировать 2 =====
AppPage1.java
public class AppPage1 extends Activity{
Button goToAppPage2;
BroadcastReceiver logout;
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.apppage1);
IntentFilter intentFilter = new IntentFilter();
intentFilter.addAction("com.closing.application.pages.AppPage1");
logout = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
finish();
}
};
registerReceiver (logout, intentFilter);
goToAppPage2 = (Button) findViewById(R.id.goToAppPage2);
goToAppPage2.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
// TODO Auto-generated method stub
Intent i1 = new Intent(AppPage1.this, AppPage2.class);
startActivity(i1);
}
});
}
@Override
protected void onDestroy() {
// TODO Auto-generated method stub
super.onDestroy();
unregisterReceiver(logout);
}
}
AppPage2.java
public class AppPage2 extends Activity{
Button goToAppPage3;
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.apppage2);
Intent intent = new Intent("kill");
intent.setType("spartan!!!");
sendBroadcast(new Intent(this, AppPage1.class));
goToAppPage3 = (Button) findViewById(R.id.goToAppPage3);
goToAppPage3.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
// TODO Auto-generated method stub
Intent i1 = new Intent(AppPage2.this, AppPage3.class);
startActivity(i1);
}
});
}
}
Ответы
Ответ 1
Вы можете достичь этого посредством широковещательного сообщения. Я сам использую его в том случае, когда действия зависят от пользователя, который должен войти в систему, поэтому, когда он выходит из системы, все эти действия должны быть завершены, и остается только экран входа в систему.
Сначала зарегистрируйте трансляцию в действиях, которые должны быть завершены. Если количество действий велико, вы можете создать родительскую активность, из которой может распространяться другая, поэтому вам не нужно многократно повторять этот код:
IntentFilter intentFilter = new IntentFilter();
intentFilter.addAction("com.example.ACTION_LOGOUT");
BroadcastReceiver logout = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
finish();
}
};
registerReceiver (logout, intentFilter);
Не забудьте отменить регистрацию в onDestroy():
unregisterReceiver(logout);
Отправьте трансляцию, когда вы хотите завершить предыдущие действия:
Intent broadcastIntent = new Intent();
broadcastIntent.setAction("com.example.ACTION_LOGOUT");
sendBroadcast(broadcastIntent);
Ответ 2
Попробуйте это,
Используйте startActivityForResult(intent,0)
для вызова Activity 2 из Activity 1 и напишите следующий код в вашей Activity 1
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
switch (requestCode) {
case 0:
if (resultCode == RESULT_OK) {
finish();
}
}
}
Аналогичным образом выполните действия 2 и вызовите Activity 3, используя startActivityForResult
.
Наконец, запустите Activity 3 перед вызовом Activity 4, вы должны вызвать только finish()
. Если вы вызываете finish() в Activity 3, метод обратного вызова onActivityResult
, записанный в предыдущем действии, будет выполнен, и он завершит сам.
Ответ 3
YourActivityName.this.finish();
^^^^
попробуйте это, это не позволит пользователю вернуться к этой активности.
Ответ 4
вы можете переопределить метод onBackPressed() на 4-й странице, так что, когда пользователь нажимает клавишу "Назад", он будет вынужден перейти на главную страницу или что вам нужно.
public void onBackPressed() {
//code here, like calling back the main page of your app
}
Скрываясь вокруг, я нашел этот вопрос, может быть, третий ответ может вам помочь:
Как закрыть все действия моего приложения?