0

我正在制作一个大约有 5 个页面和一个起始屏幕的应用程序,我知道如果我finish()在该 onPause()方法中编写,一旦用户转到下一页,页面就会被破坏。

我的要求是我不希望 AppPage 1 被销毁,直到我到达应用程序的第 3 页,但是一旦用户进入应用程序的第 4 页,我想销毁所有的 1,2,3我的应用程序的 AppPages,以便通过单击后退按钮无法访问它们并直接到达我的应用程序的启动屏幕,我不会在应用程序启动时杀死它。

所以我想问一下,当用户点击第 3 页的转到下一页按钮时,是否有可能杀死我的应用程序的 1、2、3 页。

谢谢

==== 编辑 =====

开始屏幕 -> AppPage1 -> AppPage2 --> AppPage3 --> AppPage4 (Kill AppPage1,2,3 here, so if back is clicked user到达starting screen) --> 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);

        }
    });    
} 
}
4

4 回答 4

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);
于 2012-06-09T13:49:16.443 回答
0

试试这个,

用于startActivityForResult(intent,0)从 Activity 1 调用 Activity 2 并在 Activity 1 中编写以下代码

protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        switch (requestCode) {
        case 0:
            if (resultCode == RESULT_OK) {
                finish();
            }
        }
    }

在活动 2 中进行类似操作,并使用startActivityForResult.

最后在调用 Activity 4 之前形成 Activity 3 你应该调用 just finish()。如果在Activity 3中调用finish(),onActivityResult前一个Activity编写的回调方法会被执行,它会自行完成。

于 2012-06-09T13:39:42.193 回答
0
YourActivityName.this.finish();
                 ^^^^

试试这个,这将不允许用户回到那个活动

于 2012-06-09T13:39:52.033 回答
0

您可以在第 4 页覆盖 onBackPressed() 方法,这样当用户按下后退键时,他将被强制返回主页或您需要的任何内容。

 public void onBackPressed() {
        //code here, like calling back the main page of your app
    }

潜伏着我发现了这个问题,也许第三个答案可以帮助你:

如何关闭我的应用程序的所有活动?

于 2012-06-09T14:12:42.563 回答