返回菜单项单击上的主要活动

时间:2013-12-20 09:53:22

标签: android menu android-activity

我的主要活动是不断从客户端接收数据。它的右上角有三个菜单项,分别是About,Settings和Home。这三个菜单选项卡在所有三个屏幕中都可见,即主屏幕(MainActivity类),关于页面和设置页面。  点击主菜单项,我写了以下代码

    case R.id.menu_Home:
        Intent intent = new Intent(this, MainActivity.class);
        startActivity(intent);

我的问题是,如果我从任何屏幕点击主菜单项,我是否会重新启动我的活动?如果是,那么请提供一些关于如何在不重新启动它的情况下单击主菜单项进入主活动屏幕的指导,因为我不能通过一次又一次地重新启动活动来丢失数据。

5 个答案:

答案 0 :(得分:1)

您永远不应该将Activity作为数据源进行中继,因为它可以随时被操作系统杀死。您可以使用SharedPreferencesLiteSQL或其他任何内容来保存活动状态,并使用onResume方法中的此数据重新创建它。

答案 1 :(得分:1)

除了你在MainActivity中所做的事情,你可以这样做:

  1. 在MainActivity中,使用以下命令开始您的其他活动:

    Intent intent = new Intent(this, AboutPage.class);
    startActivityForResult(intent, 10);
    

    Intent intent = new Intent(this, SettingsPage.class);
    startActivityForResult(intent, 20);
    
  2. 在这两个被称为活动的每个活动中,执行以下操作:

    case R.id.menu_Home:
        setResult(SOME_NUMBER_FROM_ABOUT);
        finish();
    

    case R.id.menu_Home:
        setResult(SOME_NUMBER_FROM_SETTINGS);
        finish();
    

    将带你回到MainActivity。

  3. 覆盖MainActivity中的onActivityResult():

    @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;    
        }
    
  4. 请记住调整你的类名,SOME_NUMBER_FROM_ABOUT是一个int,您可以选择它想要的任何内容。

答案 2 :(得分:1)

是的,您正在重新启动并创建主要活动的新实例。 这可能会有所帮助: http://developer.android.com/training/basics/activity-lifecycle/index.html

在主要活动中,当从主菜单已加载并运行时,从菜单中选择主菜单时,您无需执行任何操作。您当前的代码将创建并启动一个新的活动实例。

//in MainActivity
case R.id.menu_Home: 
    break;

您还应该考虑从主要活动的菜单中删除主页选项,因为它没用。这可以通过创建不带主页选项的不同菜单来实现,也可以通过主活动进行膨胀。

在所有其他活动中,您现有的代码应该可以正常工作。 但是,如果在加载任何新活动之前使用finish()每个活动,除非您在主活动中,则活动堆栈将仅包含主活动和当前正在运行的活动。在这种情况下,您可以使用以下代码从任何其他活动返回主活动。这样,您仍然可以重新启动主活动,但可能不必重新创建它。

//In other activities    
case R.id.menu_Home: 
    finish();

答案 3 :(得分:0)

检查当前活动是否为mainActivity,然后启动意图。

case R.id.menu_Home:
if(!(this.getClass().getSimpleName()==MainActivity)){
Intent intent = new Intent(this, MainActivity.class);
        startActivity(intent);
}

答案 4 :(得分:0)

尝试这样的事情:

@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

此流程将确保您只在主活动中再次创建它。 你进入下一个活动,当你回来时,你完成了那项活动。