从其他活动返回到MainActivity

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

但是当我按下button返回到MainActivity ,屏幕上会出现某种菜单! 有人知道什么可能是错的? 请帮助一下! 谢谢!

编辑:在其他活动之一的返回button:

 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> 

Solutions Collecting From Web of "从其他活动返回到MainActivity"

你为什么不叫finish();

当你想返回到MainActivity

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

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

你正在用构造函数创build一个Intent,该构造函数为IntentIntentFilter的action参数提供一个string。 您传递了"android.intent.action.MAIN"作为该构造函数的参数,该构造函数指定Intent可以被包含<action="android.intent.action.MAIN">的IntentFilter的任何Activity所满足。

当你用这个Intent调用startActivity ,你有效地告诉Android操作系统去找一个指定android.intent.action.MAIN操作的Activity (在系统上安装的任何应用程序)。 当有多个活动有资格(在这种情况下,因为每个应用程序都会有一个包含"android.intent.action.MAIN"操作的IntentFilter的主要Activity ),操作系统会显示一个菜单让用户select应用程序使用。

至于如何回到主要活动的问题,与大多数事情一样,这取决于您的应用程序的具体情况。 虽然接受的答案可能适用于您的情况,但我不认为这是最好的解决scheme,这可能会鼓励您在Android应用程序中使用非惯用的用户界面。 如果你的ButtononClick()方法包含一个调用finish()那么你应该最有可能从用户界面中删除Button ,只是让用户推硬件/软件返回button,它具有相同的function,是惯用的Android系统。 (你会经常看到后面的button,用来模仿iOS应用程序中的iOS UINavigationController navigationBar的行为)。

如果您的主要活动启动了一系列活动,并且您希望提供一种轻松的方式来重新获得主要活动而无需重复按下后退button,那么您需要在设置标志Intent.FLAG_ACTIVITY_CLEAR_TOP后调用startActivity ,这将closures所有活动在主要活动上方的调用堆栈中,并将主要活动放到调用堆栈顶部。 见下面(假设你的主要活动子类被称为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 returnBtn = new Intent(getApplicationContext(), MainActivity.class); startActivity(returnBtn); 

如果您不想每次都创build一个新launchmodesingleTask主要活动的launchmode singleTask为Android Manifest中的launchmode

 android:launchMode="singleTask" 

我用它和完美的工作…

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

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

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

我强烈build议阅读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()方法。

资源

这通常也是如此:)

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

在button点击活动时使用这个代码,当返回到另一个活动时,通过在意图中设置标志完成以前的活动,然后在堆栈中只放一个Activity并销毁前一个活动。

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