从Android中的子活动返回MainActivity

时间:2013-08-19 09:43:24

标签: android

在我的Android应用中,流程如下所示:主页 - >第1页 - >第2页 - >第3页。在Page1,Page2&第3页我有主页按钮,当点击主页按钮时,它应该启动主页面(MainActivity)。这里MainActivity类从服务器获取JSON数据。

现在我的问题是:当我在Page1,Page2或Page3时,如果我点击Home按钮它应该转到MainACtivity.At同时,当我在Page2,如果我点击设备返回按钮它应该转到Page1 。 Simillarly,如果我在第3页,如果我点击设备后退按钮,它应该转到第2页。

为此,我使用过的常用解决方案,

//In Page1 Activity, Under Home button OnClickListner:
Intent in = new Intent(Page1.this,MainActivity.Class);
StartActivity(in); 

有了这个,每次MainActivity Class都会加载&与服务器通信,导致应用程序性能低下。

我试过的另一种方法,即

//In Page1 Activity, Under Home button OnClickListner
finish();

这适用于page1。如果我在Page2中使用finish(),它将启动page1活动。或者我有点像这样:

//In Page1 Activity:
Intent in = new Intent(Page1.this,Page2.Class);
startActivity(in);
finish();

而且,在Page2中,在Home Button OnClickListener下我写了finish()。有了这个,当我在Page2中点击Home按钮时,它将启动MainActivity。同时,如果我点击设备的后退按钮,它将启动MainActivity。它必须转到Page1。

拜托,有人可以告诉我这件事需要用什么。

谢谢大家。

5 个答案:

答案 0 :(得分:5)

您应该在儿童活动的意图中设置一个标志。

Intent i = new Intent(Page3.this, MainActivity.class); i.setFlags(FLAG_ACTIVITY_CLEAR_TOP); startActivity(i);

http://developer.android.com/guide/components/tasks-and-back-stack.html,了解更多信息。

答案 1 :(得分:1)

尝试在打开活动之前为您的意图添加一个标记。

Intent mIntent = new Intent(Present_Activity.this, Next_Activity.class)
                        .addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_CLEAR_TASK);

<强> EDITED

在调用完成之前,在您的主Activity中调用方法:

moveTaskToBack(true);

答案 2 :(得分:1)

使用此代码:

在所有页面的主页按钮的OnClick中,写下:

Intent in = new Intent(Page1.this,MainActivity.Class);
startActivity(in);
finish();

在第1页的onBackPressed中,写道:

Intent in = new Intent(Page1.this,MainActivity.Class);
startActivity(in);
finish();

在第2页的onBackPressed中,写道:

Intent in = new Intent(Page2.this,Page1.Class);
startActivity(in);
finish();

在第3页的onBackPressed中,写道:

Intent in = new Intent(Page3.this,Page2.Class);
startActivity(in);
finish();

答案 3 :(得分:0)

查看docs,您可以在清单文件中使用android:parentActivityName属性,同时声明任何activity

示例:

<activity
        android:name="com.example.Page2"
        android:parentActivityName="com.example.MainActivity" >
        <meta-data
            android:name="android.support.PARENT_ACTIVITY"
            android:value="com.example.MainActivity" />
    </activity>

您无需使用MainActivity启动Intent。它将在执行onBackPressed时调用ParentActivity。

如果您需要添加SupportLibrary,可以从here下载。

编辑:

您应按照here提及Activity Lifecycle

MainActivity的{​​{1}}方法内,启动onCreate的执行以从服务器加载数据。

当您从AsyncTask返回时,将调用Page2的{​​{1}}。所以你的数据不会再次从服务器加载。

我希望它会有所帮助!!

答案 4 :(得分:0)

不知怎的,我得到了适合我的解决方案.. 在Page2上,Home按钮SetonClickListener编写了这样的代码:

Intent in = new Intent(Page2.this,MainActivity.class);
startActivity(in);

在清单文件下: 对于主要活动已经像这样使用

android:launchMode="singleTask" 

使用此功能,每次单击“主页”按钮都会启动实例MainActivity但不与服务器通信。