我的申请中有2项活动。 在 activity1 中,我设置了一些配置并修改了某个组件的状态(例如:设置按钮状态禁用)。然后我导航到 activity2 。
在 activity2 我做了一些事情,最后,我完成了这项活动,然后回到 activity1 。
但是在 activity1 中,当我离开此活动时,我的组件状态是相同的。
如何使用 XML文件( layout )中的值声明重置组件状态?
答案 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()方法上运行“刷新”数据和相应视图的代码,就是这样。