38

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

清单:

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

4

9 回答 9

56

这就是为什么您看到带有您在onClick方法中列出的代码的菜单的原因:

您正在使用构造函数创建一个 Intent,该构造函数接受一个字符串作为Intent's的 action 参数IntentFilter。您将"android.intent.action.MAIN"作为参数传递给该构造函数,该构造函数指定Intent任何Activity具有 IntentFilter 包括<action="android.intent.action.MAIN">.

当您startActivity使用 that 调用时Intent,您实际上是告诉 Android 操作系统去寻找一个Activity(在系统上安装的任何应用程序中)指定android.intent.action.MAIN操作的。当有多个符合条件的活动时(在这种情况下,因为每个Activity应用程序都有一个IntentFilter包含该操作的主程序"android.intent.action.MAIN"),操作系统会显示一个菜单让用户选择要使用的应用程序。

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

如果您的主要活动启动了一个活动堆栈,并且您想提供一种简单的方法来返回主要活动而无需重复按下后退按钮,那么您希望startActivity在设置标志后调用,该标志Intent.FLAG_ACTIVITY_CLEAR_TOP将关闭调用堆栈中的所有活动它们在您的主要活动之上,并将您的主要活动带到调用堆栈的顶部。见下文(假设您的主要活动子类称为 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);
    }
)};
于 2013-02-13T16:03:51.033 回答
55

你为什么不打电话finish();

当你想返回 MainActivity

   btnReturn1.setOnClickListener(new View.OnClickListener() {
    public void onClick(View v) {
        finish();
    }
});
于 2013-02-13T08:00:34.320 回答
17

采用

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

startActivity(returnBtn);

如果您不想每次都创建新活动launchmode,请在 Android Manifest 中创建主要活动。singleTask

android:launchMode="singleTask" 
于 2013-02-13T07:54:49.070 回答
13

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

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

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

于 2016-02-08T12:56:31.497 回答
9

这通常也有效:)

navigateUpTo(new Intent(getBaseContext(), MainActivity.class));
于 2016-07-25T17:09:57.000 回答
2

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

于 2013-02-13T08:00:24.760 回答
1

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

  Intent i=new Intent("this","YourClassName.Class");
  i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
  startActivity(i);
于 2013-02-13T08:06:04.707 回答
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()调用 get 方法。

来源

于 2014-10-13T10:51:54.753 回答
0

我只是这样做

public void retorna(View view)
    {
        Intent muda = new Intent(getApplicationContext(),MainActivity.class);

        muda.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
       
        startActivity(muda);
   }
于 2021-11-10T15:26:16.277 回答