我的应用程序中有 2 个活动。在activity1中,我设置了一些配置并修改了一些组件的状态(例如:设置按钮状态禁用)。我导航到activity2。
在activity2中我做了一些事情,最后,我完成了这个活动并回到了activity1。
但是在activity1中,当我离开此活动时,我的组件状态是相同的。
如何使用XML 文件(布局)中声明的值重置组件状态?
我的应用程序中有 2 个活动。在activity1中,我设置了一些配置并修改了一些组件的状态(例如:设置按钮状态禁用)。我导航到activity2。
在activity2中我做了一些事情,最后,我完成了这个活动并回到了activity1。
但是在activity1中,当我离开此活动时,我的组件状态是相同的。
如何使用XML 文件(布局)中声明的值重置组件状态?
在此实例中,您可以使用三个回调来管理 Activity 的状态。
由于你是返回到Activity,所以onRestart()
会被调用,并且这个回调是特定于这个实例的(在Activity被创建和显示的时候它不会被第一次调用)。
您将收到的其他回调是onStart()
and onResume()
,只要 Activity 进入前台(包括第一次),它们也会被调用。更多关于 Activity 生命周期的信息。
您可以在这些最适合您的应用程序的任何地方重置您的 UI 状态。但是,没有直接的“重置”方法可以调用视图来将它们设置回 XML 定义的阶段。您将需要手动调用方法将视图标志设置回您需要的状态。
高温高压
当您作为调用完成()的结果返回到上一个活动时,将调用 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 );
}
没有标志或属性只能在 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() 方法上运行“刷新”数据和适当视图的代码,仅此而已。