android 返回 java_Android:返回上一个活动

在Android中,可以通过多种方式实现返回上一个活动。如使用`NavUtils.navigateUpFromSameTask(this)`,或者在需要时覆写`onBackPressed()`方法。还可以利用`finish()`直接关闭当前活动,实现返回。如果在API 16及以上版本,可以调用`super.onBackPressed()`。此外,使用`startActivityForResult()`启动活动时,通过`setResult()`和`finish()`可以传递数据并返回前一个活动。
摘要由CSDN通过智能技术生成

回答(23)

e15298c6a3b4591803e154ab0c3b3e2e.png

2 years ago

如果您已正确设置具有活动父级的AndroidManifest.xml文件,则可以使用:

NavUtils.navigateUpFromSameTask(this);

这是您的孩子活动 .

e15298c6a3b4591803e154ab0c3b3e2e.png

2 years ago

默认情况下,所有新活动/意图都具有后退/上一行为,除非您在调用活动上编码 finish() .

e15298c6a3b4591803e154ab0c3b3e2e.png

2 years ago

你想控制后退按钮的行为吗?您可以通过两种方法之一覆盖后退按钮(转到特定活动) .

适用于Android 1.6及以下版本:

@Override

public boolean onKeyDown(int keyCode, KeyEvent event) {

if (keyCode == KeyEvent.KEYCODE_BACK && event.getRepeatCount() == 0) {

// do something on back.

return true;

}

return super.onKeyDown(keyCode, event);

}

或者,如果您只支持Android 2.0或更高版本:

@Override

public void onBackPressed() {

// do something on back.

return;

}

e15298c6a3b4591803e154ab0c3b3e2e.png

2 years ago

只需调用这些方法即可完成当前活动或通过onBackPressed返回

finish();

要么

onBackPressed();

e15298c6a3b4591803e154ab0c3b3e2e.png

2 years ago

Android活动存储在活动堆栈中 . 回到之前的活动可能意味着两件事 .

您使用 startActivityForResult 从另一个活动中打开了新活动 . 在这种情况下,您只需从代码中调用 finishActivity() 函数,它将返回上一个活动 .

跟踪活动堆栈 . 每当您使用intent启动新活动时,您都可以指定意图标记,如 FLAG_ACTIVITY_REORDER_TO_FRONT 或 FLAG_ACTIVITY_PREVIOUS_IS_TOP . 您可以使用它在应用程序中的活动之间进行随机播放 . 虽然没有多用它们 . 看看这里的旗帜:http://developer.android.com/reference/android/content/Intent.html

如评论中所述,如果使用 startActivity() 打开活动,则可以使用 finish() 将其关闭 . 如果你想使用向上按钮你可以在 onOptionsSelected(MenuItem item) 方法中捕获它,并检查项目ID与 android.R.id.home 不同,如注释中提到的 R.id.home .

e15298c6a3b4591803e154ab0c3b3e2e.png

2 years ago

只是这个

super.onBackPressed();

e15298c6a3b4591803e154ab0c3b3e2e.png

2 years ago

@Override

public void onBackPressed() {

super.onBackPressed();

}

如果你想要按钮点击返回然后简单地把

bbsubmit.setOnClickListener(new View.OnClickListener() {

@Override

public void onClick(View v) {

onBackPressed();

}

});

e15298c6a3b4591803e154ab0c3b3e2e.png

2 years ago

你可以明确地调用 onBackPressed 是最简单的方法

有关详细信息,请参阅Go back to previous activity

e15298c6a3b4591803e154ab0c3b3e2e.png

2 years ago

使用intent启动第二个活动(根据您的要求使用 startActivity 或 startActivityForResult ) . 现在,当用户按下后退按钮时,顶部的当前活动将被关闭,之前的活动将被显示 .

现在假设您有两个活动,一个用于为用户选择一些设置,如语言,国家等,选择后,用户单击“下一步”按钮转到登录表单(例如) . 现在如果登录失败,那么用户将登录登录活动,如果登录成功怎么办?

如果登录成功,则必须启动另一项活动 . 这意味着将启动第三个活动,仍然有两个活动正在运行 . 在这种情况下,最好使用 startActivityForResult . 登录成功后,将OK数据发送回第一个活动并关闭登录活动 . 现在,当收到数据时,然后启动第三个活动并使用完成关闭第一个活动 .

e15298c6a3b4591803e154ab0c3b3e2e.png

2 years ago

我建议使用NavUtils.navigateUpFromSameTask(),这很容易也很简单,你可以从谷歌开发者那里学到它 . 希望我能帮到你!

e15298c6a3b4591803e154ab0c3b3e2e.png

2 years ago

在onCLick()方法中添加它,它将返回到您之前的活动

完成();

或者您可以使用它 . 它对我来说很完美

@Override

public boolean onOptionsItemSelected(MenuItem item) {

int id = item.getItemId();

if ( id == android.R.id.home ) {

finish();

return true;

}

return super.onOptionsItemSelected(item);

}

e15298c6a3b4591803e154ab0c3b3e2e.png

2 years ago

你可以试试这个:

@Override

public boolean onKeyDown(int keyCode, KeyEvent event) {

if (keyCode == KeyEvent.KEYCODE_BACK && event.getRepeatCount() == 0) {

finish();

return true;

}

return super.onKeyDown(keyCode, event);

}

e15298c6a3b4591803e154ab0c3b3e2e.png

2 years ago

得到了同样的问题和

finish(); OR super.onBackPressed();

我工作得很好,两者都一样,但没有运气 return

e15298c6a3b4591803e154ab0c3b3e2e.png

2 years ago

回到之前的活动的情况很少:

Case 1: 如果您想将结果恢复到之前的活动,那么 ActivityA.java

Intent intent = new Intent(ActivityA.this, FBHelperActivity.class);

startActivityForResult(intent,2);

FBHelperActivity.java

Intent returnIntent = new Intent();

setResult(RESULT_OK, returnIntent);

finish();

Case 2: ActivityA - > FBHelperActivity ----> ActivityA

ActivityA.java

Intent intent = new Intent(ActivityA.this, FBHelperActivity.class);

startActivity(intent);

FBHelperActivity.java

after getting of result call finish();

By this way your second activity will finish and because

you did not call finish() in your first activity then

automatic first activity is in back ground, will visible.

e15298c6a3b4591803e154ab0c3b3e2e.png

2 years ago

@Override

public boolean onOptionsItemSelected(MenuItem item) {

int id = item.getItemId();

if ( id == android.R.id.home ) {

finish();

return true;

}

return super.onOptionsItemSelected(item);

}

试试这个它在 toolbar back button 上同时适用于 hardware back button .

e15298c6a3b4591803e154ab0c3b3e2e.png

2 years ago

试试Activity#finish() . 这或多或少是默认情况下后退按钮的作用 .

e15298c6a3b4591803e154ab0c3b3e2e.png

2 years ago

试试这个,第一个活动

Intent mainIntent = new Intent(Activity1.this, Activity2.class);

this.startActivity(mainIntent);

在你的第二个活动中

@Override

public void onBackPressed() {

this.finish();

}

e15298c6a3b4591803e154ab0c3b3e2e.png

2 years ago

只需点击 finish() 即可 . 它将带你到上一个活动 .

e15298c6a3b4591803e154ab0c3b3e2e.png

2 years ago

如果你想去只是想去以前的活动使用

finish();

要么

onBackPressed();

如果你想进入第二项活动或以下使用以下活动:

intent = new Intent(MyFourthActivity.this , MySecondActivity.class);

intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);

//Bundle is optional

Bundle bundle = new Bundle();

bundle.putString("MyValue1", val1);

intent.putExtras(bundle);

//end Bundle

startActivity(intent);

e15298c6a3b4591803e154ab0c3b3e2e.png

2 years ago

intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);

这将使您进入之前的活动,保持其堆栈并清除堆栈后的所有活动 .

例如,如果堆栈是A-> B-> C-> D并且您使用此标志启动B,则堆栈将为A-> B

e15298c6a3b4591803e154ab0c3b3e2e.png

2 years ago

从 FirstActivity 使用 startActivityForResult() 方法调用 SecondActivity

对于例:

Intent i = new Intent(this, SecondActivity.class);

startActivityForResult(i, 1);

在 SecondActivity 中设置要返回 FirstActivity 的数据 . 如果你没有设置任何 .

例如:如果要发回数据,请在 secondActivity 中:

Intent returnIntent = new Intent();

returnIntent.putExtra("result",result);

setResult(Activity.RESULT_OK,returnIntent);

finish();

如果您不想返回数据:

Intent returnIntent = new Intent();

setResult(Activity.RESULT_CANCELED, returnIntent);

finish();

现在在 FirstActivity 类中编写 onActivityResult() 方法的以下代码 .

@Override

protected void onActivityResult(int requestCode, int resultCode, Intent data) {

if (requestCode == 1) {

if(resultCode == Activity.RESULT_OK){

String result=data.getStringExtra("result");

}

if (resultCode == Activity.RESULT_CANCELED) {

//Write your code if there's no result

}

}

}//onActivityResult

e15298c6a3b4591803e154ab0c3b3e2e.png

2 years ago

Try this is act as you have to press back button

finish();

onBackPressed();

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值