3

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

activity2中我做了一些事情,最后,我完成了这个活动并回到了activity1

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

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

4

3 回答 3

3

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

由于你是返回到Activity,所以onRestart()会被调用,并且这个回调是特定于这个实例的(在Activity被创建和显示的时候它不会被第一次调用)。

您将收到的其他回调是onStart()and onResume(),只要 Activity 进入前台(包括第一次),它们也会被调用。更多关于 Activity 生命周期的信息

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

高温高压

于 2012-06-04T15:58:00.847 回答
3

当您作为调用完成()的结果返回到上一个活动时,将调用 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 );
    }
于 2012-11-14T04:26:34.603 回答
2

没有标志或属性只能在 xml 文件中设置以实现您想要的,但好消息是您描述的内容可以通过多种方式完成:

一种方法是执行这两个操作:

使用以下属性在 manifest.xml 上设置您的“activity1”属性:

android:noHistory="true"

当您离开它时,此标志将从堆栈中删除活动。

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

代替:

super.onBackPressed();

写:

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

当用户从活动 2 按下返回时,这将导致活动 1 的新实例启动。

第二个选项,是遵循Devunwired 的建议,只需在“activity1”上实现onResume()方法,当活动返回前台时调用该方法:

代替:

super.onBackPressed();

写:

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

这种实现将导致“activity1”在返回到前台时通过声明和重新打开自身来“重新启动”

如果您想知道从我的角度来看什么是正确的做法:您想要重新启动活动的原因可能是您想要刷新一些值和视图状态。您需要做的不是重新启动活动,而是在 onResume() 方法上运行“刷新”数据和适当视图的代码,仅此而已。

于 2012-06-04T16:12:18.923 回答