我正在创建一个大约有5页的应用程序以及一个起始屏幕,我知道如果我在finish()
方法中编写onPause()
,一旦用户进入该页面,该页面将被销毁下一页。
我的要求是,在我到达应用程序的第3页之前,我不希望销毁AppPage 1,但是一旦用户转到应用程序的第4页,我想要销毁所有1, 2,3我的应用程序的应用程序,以便通过单击后退按钮无法访问它们,直接到达我的应用程序的起始屏幕,我没有在应用程序启动时查杀。
所以我想问一下,当用户点击第3页的转到下一页按钮时,是否有可能杀死我的应用程序的1,2,3页。
由于
====编辑=====
开始屏幕 - > AppPage1 - > AppPage2 - > AppPage3 - > AppPage4(在此处杀死AppPage1,2,3,如果单击后退,则用户到达开始时间) - > 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);
}
});
}
}
答案 0 :(得分:2)
您可以通过广播消息实现此目的。我自己在活动依赖于用户登录的情况下使用它,因此当他退出时,所有这些活动都应该完成,只有登录屏幕应该保留。
首先,在应该完成的活动中注册广播。如果活动的数量很大,您可以从另一个可以扩展的地方创建父活动,因此您不必多次重复此代码:
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);
答案 1 :(得分:0)
试试这个,
使用startActivityForResult(intent,0)
从活动1中调用活动2,并在活动1中编写以下代码
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
switch (requestCode) {
case 0:
if (resultCode == RESULT_OK) {
finish();
}
}
}
在活动2中执行类似操作,并使用startActivityForResult
调用活动3。
最后在调用Activity 4之前形成Activity 3,你应该只调用finish()
。如果在Activity 3中调用finish(),则前一个Activity中编写的回调方法onActivityResult
将被执行,它将自行完成。
答案 2 :(得分:0)
YourActivityName.this.finish();
^^^^
尝试此操作,这将不允许用户返回该活动
答案 3 :(得分:0)
你可以在第4页覆盖onBackPressed()方法,这样当用户按下后退键时,他将被强制进入主页面,或者你需要的任何内容。
public void onBackPressed() {
//code here, like calling back the main page of your app
}
潜伏着我发现了这个问题,也许第三个答案可以帮到你: