在我的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。
拜托,有人可以告诉我这件事需要用什么。
谢谢大家。
答案 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但不与服务器通信。