导航返回时Android重置活动组件状态

时间:2012-06-04 15:52:42

标签: android layout android-activity android-intent navigation

我的申请中有2项活动。 在 activity1 中,我设置了一些配置并修改了某个组件的状态(例如:设置按钮状态禁用)。然后我导航到 activity2

activity2 我做了一些事情,最后,我完成了这项活动,然后回到 activity1

但是在 activity1 中,当我离开此活动时,我的组件状态是相同的。

如何使用 XML文件 layout )中的值声明重置组件状态?

3 个答案:

答案 0 :(得分:3)

当您调用finish()返回上一个活动时,将调用onActivityResult方法。 您可以在此方法中将视图重新填充到所需的状态。

例如:


    ...
        Intent result_intent = new Intent();
        setResult( Activity.RESULT_OK, result_intent );
        finish();
    }

    public void onActivityResult( int requestCode, int resultCode, Intent data )
    {
        setContentView( R.layout.my_activity );
    }

答案 1 :(得分:2)

您可以在此实例中使用三个回调来管理活动的状态。

由于您将返回活动,因此将调用onRestart(),并且此回调特定于此实例(在创建和显示活动时不会调用它。)

您将收到的其他回调是onStart()onResume(),这些回调也会在活动到达前台(包括第一次)时调用。有关活动生命周期here的更多信息。

您可以在最适合您的应用程序的任何一个位置重置UI的状态。但是,没有直接的“重置”方法可以调用视图将它们设置回XML定义的阶段。您需要手动调用方法将视图标志设置回所需的状态。

HTH

答案 2 :(得分:2)

没有可以在xml文件中设置的标记或属性来实现你想要的,但好消息是你所描述的内容可以通过很多方式完成: / p>

单向是执行两次操作:

使用property:

在manifest.xml上设置“activity1”属性
android:noHistory="true"

当你离开它时,这个标志将从堆栈中删除活动。

然后,覆盖“activity2”的 onBackPressed()方法:

而不是:

super.onBackPressed();

写:

Intent intent = new Intent(this, Activity1.class);
startActivity(intent);
finish();

这将导致当用户从activity2返回时启动activity1的新实例。

第二个选项,是遵循 Devunwired 建议,并在您的“activity1”上实施 onResume()方法,该方法已被调用当活动恢复到地面时:

而不是:

super.onBackPressed();

写:

Intent intent = getIntent();
startActivity(intent);
finish();

这个实现会导致“activity1”通过在返回forground时重新打开并重新打开来重新启动

如果你想从我的角度知道什么是正确的事情:可能你想要重新启动活动的原因是你想要刷新一些值和视图状态。你需要做的不是重新启动活动,而是在onResume()方法上运行“刷新”数据和相应视图的代码,就是这样。