从Android的子活动返回MainActivity

3
在我的Android应用程序中,流程如下:首页 -> 页面1 -> 页面2 -> 页面3。在页面1、页面2和页面3上,我有一个“主页”按钮,当单击“主页”按钮时,应启动主页(MainActivity)。在这里,MainActivity类从服务器获取JSON数据。
现在我的问题是:当我在页面1、页面2或页面3上时,如果我单击“主页”按钮,它应该转到MainActivity。同时,当我在页面2上时,如果我单击设备的返回按钮,它应该回到页面1。同样,如果我在页面3上,如果我单击设备的返回按钮,它应该回到页面2。
为此,我通常使用的解决方案是:
//In Page1 Activity, Under Home button OnClickListner:
Intent in = new Intent(Page1.this,MainActivity.Class);
StartActivity(in); 

每次 MainActivity 类加载并与服务器通信时,都会导致应用程序性能下降。

我尝试了另一种方法,即

//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按钮的OnClickListener下写了finish()。这样,当我在Page2上点击Home按钮时,它会启动MainActivity。同时,如果我点击设备的返回按钮,也会启动MainActivity。但实际上应该回到Page1。请问有没有人能给我建议如何解决这个问题。谢谢大家。
5个回答

5

1

尝试在启动活动之前向您的意图添加标志,就像这样。

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

编辑

在您的主 Activity 中,在调用 finish 之前,请调用该方法:

moveTaskToBack(true);

嗨,Pavlos,我已经尝试了你提到的代码片段。结果是一样的。 - Raj_Angadi
我已经添加了moveTaskToBack(true), 但应用程序被关闭并返回到主屏幕!! - Raj_Angadi
是的,当你完成 MainActivity 时,这种情况应该发生!你期望发生什么? - Pavlos
期望的效果是:当我在页面2时,如果点击设备的返回按钮,则返回到页面1。否则,如果点击Home按钮(ImageView),则应该返回到MainActivity.class。 - Raj_Angadi
对于ImageView,您必须实现其自己的个人点击监听器。对于页面,请遵循我上面写的意图,并在不需要时删除moveTaskToBack方法! - Pavlos

1

使用以下代码:

在所有页面的主页按钮的OnClick中,编写以下内容:

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

在page1的onBackPressed中编写:
Intent in = new Intent(Page1.this,MainActivity.Class);
startActivity(in);
finish();

在 page2 的 onBackPressed 中编写:
Intent in = new Intent(Page2.this,Page1.Class);
startActivity(in);
finish();

在page3的onBackPressed中编写:
Intent in = new Intent(Page3.this,Page2.Class);
startActivity(in);
finish();

是的,我已经尝试过了。在我的情况下,MainActivity类与服务器通信并加载JSON数据。由于这个原因,每次应用程序与服务器通信都会减慢应用程序的速度。因此,正在寻找替代解决方案。 - Raj_Angadi
与服务器通信肯定会使其变慢。如果数据很小,为什么不将数据保存在SharedPrefrences中,或者保存在数据库中,这样您就不需要每次都这样做了。 - Pramod Ravikant

1

不知怎么的,我找到了解决方案... 在第二页,主页按钮SetonClickListener的代码如下:

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

在清单文件中: 对于主活动,使用了以下方式
android:launchMode="singleTask" 

每次点击主页按钮时,都会启动MainActivity实例,但不会与服务器进行通信。

0

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

示例:

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

您不需要使用Intent来启动MainActivity。在执行onBackPressed时,它会处理调用ParentActivity。

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

编辑:

此处所述,您应该管理Activity生命周期

MainActivityonCreate方法中,启动执行AsyncTask以从服务器加载数据。

当您从Page2返回时,将调用MainActivityonResume。因此,您的数据将不会再次从服务器加载。

希望这对您有所帮助!


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接