从另一个活动返回MainActivity

时间:2013-02-13 07:37:20

标签: android android-activity

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

但是当我按下按钮返回MainActivity时,屏幕上会显示某种菜单!谁知道什么可能是错的?提供一些帮助!谢谢!

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

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);
    }
});

The Manifest:

<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>

8 个答案:

答案 0 :(得分:47)

这就是您看到包含您在onClick方法中列出的代码的菜单的原因:

您正在使用构造函数创建一个Intent,该构造函数为Intent的{​​{1}}的action参数获取字符串。您将IntentFilter作为参数传递给该构造函数,该构造函数指定任何"android.intent.action.MAIN"可以使用包含Intent的IntentFilter来满足Activity

当您使用<action="android.intent.action.MAIN">调用startActivity时,您有效地告诉Android操作系统找到Intent(在系统上安装的任何应用中),指定Activity行动。如果有多个活动符合条件(并且在这种情况下,因为每个应用都会有一个主android.intent.action.MAINActivity包含IntentFilter操作,操作系统提供了一个菜单,让用户可以选择要使用的应用程序。

关于如何回到主要活动的问题,与大多数事情一样,这取决于您的应用的具体情况。虽然接受的答案可能适用于您的情况,但我认为这不是最佳解决方案,并且可能会鼓励您在Android应用中使用非惯用UI。如果您的"android.intent.action.MAIN"的{​​{1}}方法仅包含 Button的调用,那么您很可能会从用户界面中删除onClick()用户按下硬件/软件后退按钮,该按钮具有相同的功能并且适用于Android。 (您经常会看到用于模拟iOS UINavigationController navigationBar行为的Buttons,这在Android应用程序中是不鼓励的。)

如果您的主要活动启动了一系列活动,并且您希望提供一种简单的方法来回到主要活动而无需反复按下后退按钮,那么您需要在设置标志finish()后调用Button 1}}将关闭调用堆栈中位于主活动之上的所有活动,并将主活动置于调用堆栈的顶部。请参阅下文(假设您的主要活动子类称为MainActivity:

startActivity

答案 1 :(得分:43)

为什么不拨打finish();

当您想要返回MainActivity

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

答案 2 :(得分:9)

使用

Intent returnBtn = new Intent(getApplicationContext(),
                    MainActivity.class);

startActivity(returnBtn);
如果您不想每次都创建新活动,请在Android Manifest中将主要活动launchmode设为singleTask

android:launchMode="singleTask" 

答案 3 :(得分:8)

我使用它并且工作得很好......

api

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

答案 4 :(得分:3)

这通常也有效:)

navigateUpTo(new Intent(getBaseContext(), MainActivity.class));

答案 5 :(得分:1)

而不是通过startActivity再次启动MainActivity,而是在其他活动中调用finish()以返回MainActivity ...因为MainActivity已经在堆栈中

答案 6 :(得分:1)

我强烈建议您阅读Intent.FLAG_ACTIVITY_CLEAR_TOP标志上的文档。使用它将必须一直返回到第一个(main)活动。该标志仅删除Intent中给出的活动类之前的所有现有活动。这在文档中有很好的解释:

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.

请注意,活动可以设置为移动到前台(即清除其上的所有其他活动),然后也可以重新启动,或者仅调用onNewIntent()方法。

Source

答案 7 :(得分:0)

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

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