Android:返回上一个活动

时间:2010-10-27 23:13:55

标签: android android-intent android-activity

我想在Android应用上做一些简单的事情。 怎么可能回到以前的活动。

回到之前的活动我需要什么代码

23 个答案:

答案 0 :(得分:455)

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

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

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

  3. 如评论中所述,如果使用startActivity()打开活动,则可以使用finish()关闭该活动。 如果您希望使用“向上”按钮,则可以使用onOptionsSelected(MenuItem item)方法检查项目ID,而android.R.id.homeR.id.home不同,与评论中提到的{{1}}不同。

答案 1 :(得分:215)

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

答案 2 :(得分:74)

只需点击完成()即可。它将带您进入上一个活动。

答案 3 :(得分:65)

就是这个

super.onBackPressed();

答案 4 :(得分:30)

intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);

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

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

答案 5 :(得分:19)

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

适用于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;
}

有关详情:http://android-developers.blogspot.com/2009/12/back-and-other-hard-keys-three-stories.html

答案 6 :(得分:18)

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

finish();

OR

onBackPressed();

答案 7 :(得分:13)

如果你想去之前的活动使用

key => order

OR

finish();

如果您想进入第二项活动或以下活动,请使用以下内容:

onBackPressed();

答案 8 :(得分:11)

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

NavUtils.navigateUpFromSameTask(this);

这是您的孩子活动。

答案 9 :(得分:10)

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

  

结束();

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

 @Override
  public boolean onOptionsItemSelected(MenuItem item) {
  int id = item.getItemId();

      if ( id == android.R.id.home ) {
         finish();
         return true;
       }

  return super.onOptionsItemSelected(item);
  }

答案 10 :(得分:7)

您可以明确地致电onBackPressed是最简单的方式 有关详细信息,请参阅Go back to previous activity

答案 11 :(得分:6)

遇到同样的问题和

finish();  OR super.onBackPressed();

对我来说很好,两者都一样,但return

没有运气

答案 12 :(得分:6)

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

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

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

答案 13 :(得分:5)

你可以试试这个:

@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
    if (keyCode == KeyEvent.KEYCODE_BACK && event.getRepeatCount() == 0) {

        finish();
        return true;
    }
    return super.onKeyDown(keyCode, event);
}

答案 14 :(得分:5)

尝试此操作,因为您必须按后退按钮

finish();
onBackPressed();

答案 15 :(得分:4)

@Override
public void onBackPressed() {
    super.onBackPressed();
}

如果你想点击按钮,请点击返回然后直接输入

bbsubmit.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        onBackPressed();
    }
});

答案 16 :(得分:4)

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

答案 17 :(得分:3)

import java.util.ArrayDeque;
import java.util.Deque;
import java.util.LinkedList;

/**
 * Created by fang on 7/30/17.
 */
public class DequeMethods {
    public static void main(String[] args){
        Deque<Integer> queue = new LinkedList<>();
        Deque<Integer> stack = new LinkedList<>();
        for(int i=0;i<100;i++){
            queue.offer(i);
            stack.push(i);
        }
        System.out.println(queue.peek());
        System.out.println(stack.peek());
    }
}

尝试使用工具栏后退按钮作为硬件后退按钮

答案 18 :(得分:2)

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

答案 19 :(得分:0)

除了所有提到的答案之外,他们仍然是另一种方法,假设你有两个班,A班和B班。

A类你做了一些活动,如复选框选择,打印出一些数据和意图到B类。 B类,你想将多个值传递给A类并保持以前的A类状态,你可以使用,试试这个替代方法或下载源代码来演示这个

http://whats-online.info/science-and-tutorials/125/Android-maintain-the-previous-state-of-activity-on-intent/

http://developer.android.com/reference/android/content/Intent.html

答案 20 :(得分:0)

试试这个,  第一项活动

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

在你的第二个活动中

@Override
public void onBackPressed() {
    this.finish();
}

答案 21 :(得分:0)

很少有情况可以返回到您以前的活动:

案例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();

案例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.

答案 22 :(得分:0)

首先,如果您想返回上一个活动,则需要牢记。然后,在使用Intent进行其他活动时,请勿调用finish()方法。

此后,您有两种方法可以从当前活动返回到先前活动:

只需调用:在按钮点击监听器下的finish(), 要么 覆盖以下使用系统后退按钮进行后退的方法:

@Override
public void onBackPressed() {
    super.onBackPressed();
}