我读了很多关于这个主题的帖子,但我找不到符合我需要的东西。
我有一个有3个活动的应用程序(我在这里称之为屏幕,更直观):A(MainActivity),B和C.
屏幕A启动另一个进程,从该进程中检索一些信息并根据答案设置布局。然后它给你机会做某事(写一个文本)。这是在OnCreate()上完成的。
屏幕B不是很有趣(显示文本并允许您编辑它)。
屏幕C有一个退出应用程序的按钮(基本上是启动主页活动)。 C还会关闭我们在A上开始的过程(在向其传达一些信息之后)。
到目前为止一切顺利。
问题是,当我重新启动应用程序时,我再次看到屏幕C.这对我来说不好,因为我希望用户能够编辑文本,而不必回到第一个或第二个屏幕(不是因为它太难了,而是因为我需要他看到新信息显示在屏幕A在他做任何事之前。这不能在C之后完成,因为在C完成之后,除非他决定再次启动应用程序。)
这意味着当我进入屏幕C并按下按钮时,我的应用程序就完成了,我没有什么可以做的(但重新开始)。但如果我的应用程序在屏幕B上暂停,则无需重新开始 - 我可以回到它并继续从那里开始(常规的Android行为)。
所以我设置android:clearTaskOnLaunch="true"
但现在我有两个问题:
1.即使应用程序暂停在B上,它现在又重新开始(有点,见#2),这不是我需要的。
2.它并没有真正开始新鲜......是的,我看到屏幕A.但是我在OnCreate()上做的所有事情都没有再次完成,这意味着我的其他进程没有启动并运行,然后我的应用程序崩溃,因为我没有人和他说话.....
这种情况有解决方案吗? 我需要开始新鲜的(但是真的很新鲜,我在OnCreate()上完成的所有事情都已完成)只有在上一次运行应用程序完成后(我们按下屏幕C上的单个按钮并返回到主屏幕)。 在任何其他暂停的情况下(如果我们没有按下按钮,则在A,B,甚至C中)我想要正常的Android行为(即返回到同一屏幕)。
非常感谢任何帮助。
答案 0 :(得分:0)
要解决此问题,您可以利用Android活动生命周期:http://developer.android.com/training/basics/activity-lifecycle/stopping.html
只需在活动B中调用finish(),在onStop()或onPause()中调用C,以便在应用关闭时擦除那些活动(或者说“屏幕”)。当您重新打开应用程序时,活动A应该重新打开,保持最后一个状态。
如果你想要消除活动A中的最后一个状态,那么在适当的时候添加一个finish()调用(根据你的使用情况可能再次onStop或onPause)
祝你好运!答案 1 :(得分:0)
之前我有一个类似的应用程序,一个调查应用程序,并具有相同的情况。 A-> B-> C,一旦你完成C,你就直接进入A并且不能回去,但你可以从B-> A返回。我在这里做了什么:
1)启动B活动时将其添加到A活动:
Intent start;
start = new Intent(MainActivity.this, RecordName.class);
startActivityForResult(start, 2);
和你的A活动中的这个方法:
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == 2) {
if(resultCode == RESULT_OK){
//String result=data.getStringExtra("result");
finish();
}
}
2)在B Activity中,在启动C Activity时添加: 意图开始; start = new Intent(B.this,C.class); startActivityForResult(启动,1);
再次在你的B活动中:
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == 1) {
if(resultCode == RESULT_OK){
//String result=data.getStringExtra("result");
finish();
}
}
3)在您的C活动中,将此添加到您的印刷方法:
Intent start;
start = new Intent(C.this,A.class);
// pass any data back to A activity
start.putExtra("Key", String);
startActivity(start);
// to close previous activities
Intent returnIntent = new Intent();
//returnIntent.putExtra("result","finish");
setResult(RESULT_OK,returnIntent);
// close current activity
finish();
我希望这会有所帮助