Android 从另一个活动返回到MainActivity

Android 从另一个活动返回到MainActivity,android,android-activity,Android,Android Activity,main活动包含一些按钮。每个按钮通过一个意图打开一个新的活动。然后,这些活动有一个按钮,可通过意图返回到main活动 但当我按下按钮返回到main活动时,屏幕上会出现某种菜单!一个知道会出什么问题的人?谢谢你的帮助!谢谢 编辑:其他活动之一中的返回按钮: Button btnReturn1 = (Button) findViewById(R.id.btnReturn1); btnReturn1.setOnClickListener(new View.OnClickListener() {

main活动
包含一些按钮。每个按钮通过一个意图打开一个新的活动。然后,这些活动有一个按钮,可通过意图返回到
main活动

但当我按下按钮返回到
main活动时,屏幕上会出现某种菜单!一个知道会出什么问题的人?谢谢你的帮助!谢谢

编辑:其他活动之一中的返回按钮:

Button btnReturn1 = (Button) findViewById(R.id.btnReturn1);
btnReturn1.setOnClickListener(new View.OnClickListener() {      
    public void onClick(View v) {
        // TODO Auto-generated method stub
        Intent returnBtn = new Intent("android.intent.action.MAIN");
        startActivity(returnBtn);
    }
});
舱单:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.kullaberg.test02"
android:versionCode="1"
android:versionName="1.0" >

<uses-sdk
    android:minSdkVersion="10"
    android:targetSdkVersion="15" />

<application
    android:icon="@drawable/ic_launcher"
    android:label="@string/app_name"
    android:theme="@style/AppTheme" >
    <activity
        android:name=".MainActivity"
        android:label="@string/title_activity_main" >
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
    <activity
        android:name=".Activity1"
        android:label="@string/title_activity_main" >
        <intent-filter>
            <action android:name="android.intent.action.ACTIVITY001" />

            <category android:name="android.intent.category.DEFAULT" />
        </intent-filter>
    </activity>
    <activity
        android:name=".Activity2"
        android:label="@string/title_activity_main" >
        <intent-filter>
            <action android:name="android.intent.action.ACTIVITY002" />

            <category android:name="android.intent.category.DEFAULT" />
        </intent-filter>
    </activity>
    <activity
        android:name=".Activity3"
        android:label="@string/title_activity_main" >
        <intent-filter>
            <action android:name="android.intent.action.ACTIVITY003" />

            <category android:name="android.intent.category.DEFAULT" />
        </intent-filter>
    </activity>
</application>

使用

如果不想每次都创建一个新任务,请在Android清单中将主活动的
启动模式
设置为
单任务

android:launchMode="singleTask" 

不要通过startActivity再次启动MainActivity,而是在其他活动中调用finish()返回MainActivity。。。既然MainActivity已经在堆栈中了,为什么不调用
finish()

当您想返回MainActivity时

   btnReturn1.setOnClickListener(new View.OnClickListener() {
    public void onClick(View v) {
        finish();
    }
});

在活动中单击按钮时使用此代码,当返回到另一个活动时,只需通过在intent中设置标志来完成上一个活动,然后在堆栈中仅放置一个活动并销毁上一个活动

  Intent i=new Intent("this","YourClassName.Class");
  i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
  startActivity(i);

下面是您看到菜单的原因,其中包含您在
onClick
方法中列出的代码:

您正在使用构造函数创建一个Intent,该构造函数为
Intent
IntentFilter
的操作参数获取一个字符串。您将
“android.intent.action.MAIN”
作为参数传递给该构造函数,该构造函数指定任何
活动
都可以使用包含
的IntentFilter来满足
意图

当您使用该
意图调用
startActivity
时,您有效地告诉Android操作系统查找指定
Android.Intent.action.MAIN
操作的
活动
(在系统上安装的任何应用程序中)。当有多个活动符合条件时(在本例中,由于每个应用程序都有一个带有
IntentFilter
的主
Activity
,包括
“android.intent.action.main”
action),操作系统会显示一个菜单,让用户选择使用哪个应用程序

至于如何回到你的主要活动的问题,就像大多数事情一样,这取决于你的应用程序的具体情况。虽然公认的答案可能对您的情况有效,但我认为这不是最好的解决方案,它可能鼓励您在Android应用程序中使用非惯用的UI。如果
按钮
onClick()
方法只包含对
finish()
的调用,那么您很可能应该从UI中删除
按钮
,让用户按下硬件/软件后退按钮,该按钮具有相同的功能,并且是Android惯用的。(您经常会看到后退按钮,用于模拟iOS UINavigationController导航栏的行为,Android应用程序不鼓励这种行为)

如果您的主要活动启动了一堆活动,并且您希望提供一种简单的方法返回到主要活动,而无需重复按下“后退”按钮,然后,您需要在设置标志
Intent.flag\u ACTIVITY\u CLEAR\u TOP
后调用
startActivity
,该标志将关闭调用堆栈中位于主活动之上的所有活动,并将主活动带到调用堆栈的顶部。请参见下文(假设您的主活动子类称为MainActivity:

btnReturn1.setOnClickListener(new View.OnClickListener() {
    public void onClick(View v) {
        Intent i=new Intent(this, MainActivity.class);
        i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
        startActivity(i);
    }
)};

我强烈建议阅读
Intent.FLAG\u ACTIVITY\u CLEAR\u TOP
标志上的文档。使用它将必然返回到第一个(
main
)活动。该标志将仅删除
意图中给定的活动类之前的所有现有活动。文档中对此进行了详细解释:

For example, consider a task consisting of the activities: A, B, C, D.
If D calls startActivity() with an Intent that resolves to the component of
activity B, then C and D will be finished and B receive the given Intent, 
resulting in the stack now being: A, B.
请注意,可以将活动设置为移动到前台(即清除其上的所有其他活动),然后重新启动,或者仅调用get
onNewIntent()
方法


我用过它,而且工作得很好

startActivity(new Intent(getApplicationContext(),MainActivity.class).setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP)); 

因为Finish()用于两个活动,而不是多个活动

这通常也适用:)


发布该按钮的代码。无论您是否在Manifests中使用了“android:noHistory=true”,请提供屏幕截图、日志和一些代码,因为根据您的解释很难理解……我认为屏幕截图不会有多大帮助,因为这是瑞典语:)您正在调用setContentView(blablabla.xml)所针对的活动吗您是否可以在代码中添加一些注释?它有助于OP和其他访问者理解它。检查这个和如何给出正确答案。非常好的解释!对于我的“返回MainActivity”需求,
startActivity(新意图(这个,MainActivity.class).setFlags(意图.FLAG\u活动\u清除\u顶部))
工作得很好。如果您能解释我们何时需要使用
finish()
,那就太好了。您可以在任何时候关闭活动时使用
finish()
。虽然我建议不要包含后退按钮,因为这在Android上是不必要的,并且可能会扰乱您的UI,但也有可能这样做,并且在许多情况下,您可能希望小部件对触摸做出响应,执行某个操作,然后调用
finish()
某个活动。这实际上不会返回到MainActivity,它开始了主要的活动。我正在寻找可以在当前状态下返回MainActivity的内容,而不是启动新活动。非常好..谢谢:)finish()实际上没有帮助返回MainActivity,它只是关闭当前activityfinish()只需销毁您当前的活动。它会将我返回到
Login
activity,而不是
MainActivity
activity。这应该是正确的answe
startActivity(new Intent(getApplicationContext(),MainActivity.class).setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP)); 
navigateUpTo(new Intent(getBaseContext(), MainActivity.class));