从另一个活动返回MainActivity

3D-*_*tiv 34 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);
    }
});
Run Code Online (Sandbox Code Playgroud)

清单:

<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>
Run Code Online (Sandbox Code Playgroud)

Bri*_*ley 50

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

您正在使用构造函数创建一个Intent,该构造函数为Intents 的action参数获取一个字符串IntentFilter.您"android.intent.action.MAIN"作为参数传递给该构造函数,该构造函数指定Intent任何Activity包含IntentFilter 的人都可以满足<action="android.intent.action.MAIN">.

当你打电话startActivity给你时Intent,你有效地告诉Android操作系统去找一个Activity(在系统上安装的任何应用程序中)指定android.intent.action.MAIN动作.当有资格(也有在这种情况下,因为多个活动的每个应用程序将有一个主ActivityIntentFilter包括"android.intent.action.MAIN"动作),操作系统将显示一个菜单,让用户选择使用哪个应用.

至于如何回到主要活动的问题,就像大多数事情一样,这取决于你的应用程序的细节.虽然接受的答案可能适用于您的情况,但我认为这不是最佳解决方案,并且可能会鼓励您在Android应用中使用非惯用UI.如果您ButtononClick()方法包含一个调用,finish()那么您很可能会Button从UI中删除它,然后让用户按下硬件/软件后退按钮,该按钮具有相同的功能并且是Android的惯用语.(您经常会看到用于模拟iOS UINavigationController navigationBar行为的Buttons,这在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);
    }
)};
Run Code Online (Sandbox Code Playgroud)

  • 很好的解释!对于我“返回 MainActivity”的需求,`startActivity(new Intent(this, MainActivity.class).setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP));` 工作得很好。 (2认同)
  • 这实际上并没有返回到 MainActivity,而是启动了 MainActivity。我正在寻找一些能够返回到当前状态的 MainActivity 而不是启动新活动的东西。 (2认同)

Int*_*hep 47

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

当您想要返回MainActivity时

   btnReturn1.setOnClickListener(new View.OnClickListener() {
    public void onClick(View v) {
        finish();
    }
});
Run Code Online (Sandbox Code Playgroud)

  • finish()实际上没有帮助返回MainActivity,它只是关闭当前活动 (17认同)

Dip*_*pin 10

使用

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

startActivity(returnBtn);
Run Code Online (Sandbox Code Playgroud)

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

android:launchMode="singleTask" 
Run Code Online (Sandbox Code Playgroud)


小智 8

我用它并完美地工作......

startActivity(new Intent(getApplicationContext(),MainActivity.class).setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP)); 
Run Code Online (Sandbox Code Playgroud)

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


Jon*_*den 5

这通常也可以工作:)

navigateUpTo(new Intent(getBaseContext(), MainActivity.class));
Run Code Online (Sandbox Code Playgroud)