在我的应用中,我有3项活动。
从第1次活动到第2次,第2次到第3次。从3日开始,它再次升至第1名。如果我从第一个按回键,那么它应该进入主屏幕(应用程序将停止)。 如果我按下第一个键,它再次进入第二个活动,如果我按下第二个后退键,那么它将转到第一个。然后,如果我按回1键,那么app停止。
我想要什么,当我进入第3个活动并按下后退按钮然后它应该转到第1个并同时完成第2个活动。
我该怎么做?
答案 0 :(得分:16)
在您打开第三个活动时完成第二个活动
假设在某个按钮点击的第二个活动中,您正在使用开始活动打开第三个活动;
startActivity(intent);
finish();//this will finish second activity and open third activity so when you press back from third activity it will open first activity.
如果你想依赖某些条件,那么就活动
setResult(123);
像这样的代码
现在在第二个活动中覆盖onActivityResult
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if(resultCode==123){
//finish
}
}
还要确保使用startActivityForResult(intent,requestCode);导致第二次活动开始第三次活动。
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
public class Activity2 extends Activity{
Button button;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main1);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
startActivityForResult(new Intent(new Intent(Activity2.this,Activity3.class)), 12);
}
});
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if(resultCode==123 && requestCode==12){
finish();
}
super.onActivityResult(requestCode, resultCode, data);
}
}
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
public class Activity3 extends Activity{
Button button;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main1);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
setResult(123);
}
});
}
}
答案 1 :(得分:4)
当你开始你的第三项活动时,你应该像这样召唤你的第二个活动:
startActivityForResult(intent, 0)
完成第3项活动后,您应该包括:
setResult(RESULT_OK);
finish();
它从第3个活动向第2个活动发送信号。
在第二轮:
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
finish();
}
它收到此信号并完成第二项活动。
答案 2 :(得分:2)
当您需要完成第二项活动时,您应该使用cleartop标志在第三项活动中启动第一项活动。
class ThirdActivity extends Activity {
....
if (somecondition) {
/* directly go to FirstActivity, finish all intermediate ones.*/
Intent intent = new Intent(this, FirstActivity.Class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);
} else {
finish(); // to simply return to 2nd activity.
}
.....
....
}
答案 3 :(得分:1)
或者,您可以在第二个活动上设置名为FLAG_ACTIVITY_NO_HISTORY
的意图标记。这样它就不会保留在历史堆栈中,因此当您从第3个活动导航回来时,它将直接进入第1个活动。
E.g。
Intent intent = new Intent(this, SecondActivity.Class);
intent.setFlags(Intent.FLAG_ACTIVITY_NO_HISTORY);
startActivity(intent);
这意味着当您从SecondActivity
启动活动时,SecondActivity
将自动完成。
答案 4 :(得分:1)
使用这种方式:在第一个活动中,声明一个这样的Activity对象,
public static Activity fa;
onCreate()
{
fa = this;
}
现在在另一个Activity中使用该对象来完成这样的第一个活动,
onCreate()
{
FirstActivity.fa.finish();
}