Android 返回菜单项上的主要活动单击
我的主要活动是不断地从客户那里接收数据。它在右上角有三个菜单项,分别是关于、设置和主页。这三个菜单选项卡在所有三个屏幕中都可见,即主屏幕(MainActivity类)、关于页面和设置页面。 单击主菜单项,我编写了以下代码Android 返回菜单项上的主要活动单击,android,menu,android-activity,Android,Menu,Android Activity,我的主要活动是不断地从客户那里接收数据。它在右上角有三个菜单项,分别是关于、设置和主页。这三个菜单选项卡在所有三个屏幕中都可见,即主屏幕(MainActivity类)、关于页面和设置页面。 单击主菜单项,我编写了以下代码 case R.id.menu_Home: Intent intent = new Intent(this, MainActivity.class); startActivity(intent); 我的问题是,如果我从任何屏幕单击主菜单项
case R.id.menu_Home:
Intent intent = new Intent(this, MainActivity.class);
startActivity(intent);
我的问题是,如果我从任何屏幕单击主菜单项,我是否重新启动活动?如果是,请为我提供一些指导,告诉我如何在单击主菜单项时转到主活动屏幕而不重新启动它,因为我不能通过反复重新启动活动来丢失数据。您不应该将活动作为数据源,因为它随时都可能被操作系统杀死。您可以使用
SharedReferences
、LiteSQL
或任何其他工具来保存活动状态,并在您的onResume
方法中使用此数据重新创建活动状态。检查当前活动是否为您的mainActivity
,然后启动意图
case R.id.menu_Home:
if(!(this.getClass().getSimpleName()==MainActivity)){
Intent intent = new Intent(this, MainActivity.class);
startActivity(intent);
}
除了在MainActivity中所做的之外,您还可以这样做:
Intent intent = new Intent(this, AboutPage.class);
startActivityForResult(intent, 10);
及
case R.id.menu_Home:
setResult(SOME_NUMBER_FROM_ABOUT);
finish();
或
这将带你回到主要活动@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
switch(requestCode) {
case 10:
//handle returning from About page
//you can also check for resultCode
//if (resultCode == SOME_NUMBER_FROM_ABOUT) {
// some code here
//}
break;
case 20:
//handle returning from Settings page
break;
}
请记住,在类名中调整此值,并且“关于”中的某个“编号”是一个整数,您可以选择它是什么。是的,您正在重新启动并创建主活动的新实例。 这可能会有帮助: 在主活动中,当从菜单中选择“主页”选项时,您无需执行任何操作,因为主活动已加载并正在运行。您当前的代码将创建并启动活动的新实例
//in MainActivity
case R.id.menu_Home:
break;
你也应该考虑从主活动菜单上删除“回家”选项,因为它没用。这可以通过创建不同的菜单来实现,而不使用主活动的home选项,并从主活动中进行充气
//in MainActivity
case R.id.menu_Home:
break;
在所有其他活动中,您现有的代码应该可以正常工作。
但是,如果在加载任何新活动之前使用finish()完成每个活动(主活动除外),则活动堆栈将仅由主活动和当前正在运行的活动组成。在这种情况下,您可以使用以下代码从任何其他活动返回到主活动。这样,您仍然可以重新启动主活动,但可能不必重新创建它
//In other activities
case R.id.menu_Home:
finish();
试着这样做:
@Override
public boolean onMenuItemSelected(int featureId, MenuItem item) {
switch (item.getItemId()) {
case R.id.menu_Home:
if (!(this instanceof MainActivity)) {
finish();
}
break;
case R.id.settings:
if (!(this instanceof Settings)) {
if(!(this instanceof MainActivity))
finish();
Intent intent = new Intent(this, Settings.class);
startActivity(intent);
}
break;
default:
break;
}
流程将是:
If
您在MainActivity上,并且选择了MainActivity不执行任何操作
else
完成你正在进行的任何活动
If
您正在“设置”活动中,并且已选择“设置”“不执行任何操作”
else if
您处于“主活动”状态,只需启动“设置”活动
else
无论你身在何处,完成并开始设置
Do same with others
此流程将确保您只在主活动上创建一个活动,而不再创建它。
您进入下一个活动,每次返回时都会完成该活动。是否“设置”和“关于”也是活动?
//in MainActivity
case R.id.menu_Home:
break;