我有两个活动在我的申请。在activity1中,我设置了一些配置,并修改了某些组件的状态(例如: set按钮状态禁用)。我导航到activity2。
在activity2中,我做了一些事情,最后,我完成了这个活动,回到了activity1。
但是在activity1中,当我离开这个活动时,组件状态是相同的。
如何用XML文件(布局)中声明的值重置组件状态?
发布于 2012-06-04 07:58:00
您可以在此实例中使用三个回调来管理活动的状态。
由于您正在返回该活动,因此将调用onRestart()
,并且此回调是特定于此实例的(它不是在创建和显示活动的第一次调用)。
您将收到的其他回调是onStart()
和onResume()
,它们在活动到达前台时也会被调用(包括第一次)。更多关于活动生命周期这里的信息。
您可以在其中任何一个最适合您的应用程序的地方重置UI的状态。但是,没有直接的“重置”方法,您可以调用视图将其设置回XML定义的阶段。您需要手动调用这些方法来将视图标志设置回所需的状态。
HTH
发布于 2012-11-13 20:26:34
当作为调用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 );
}
发布于 2012-06-04 08:12:18
没有只能在xml文件中设置的标志或属性来实现您想要的结果,但好消息是,您所描述的内容可以通过多种方式完成:
单向是执行两个操作:
在带有属性的activity1上设置“manifest.xml”属性:
android:noHistory="true"
当您离开堆栈导航时,此标志将从堆栈中移除该活动。
然后,重写“activity2”的activity2方法:
而不是:
super.onBackPressed();
写:
Intent intent = new Intent(this, Activity1.class);
startActivity(intent);
finish();
这将导致当用户从activity1按回时启动新的activity2实例。
第二个选项,是遵循Devun有线建议,在您的"activity1“上实现onResume()方法,该方法是在活动返回到follow时调用的:
而不是:
super.onBackPressed();
写:
Intent intent = getIntent();
startActivity(intent);
finish();
这一实现将导致"activity1“通过子句”重新启动“,并在返回到forground时重新打开其自身。
如果您想知道从我的角度来看什么是正确的:可能要重新启动该活动的原因是要刷新一些值和视图状态。您需要做的不是重新启动活动,而是在onResume()方法上运行“刷新”数据和适当视图的代码,仅此而已。
https://stackoverflow.com/questions/10884220
复制相似问题