Android 返回按钮并刷新以前的活动
如果我们有两项活动:Android 返回按钮并刷新以前的活动,android,Android,如果我们有两项活动: 文件列表和上次修改时间 文件编辑活动 用户从列表中选择文件并进入文件编辑活动。编辑完成后,用户按后退按钮返回文件列表 列表不会重新加载,因此在刚刚编辑的文件修改时间内显示不正确的值 按下后退按钮后刷新文件列表的正确方法是什么 本例假设未使用任何数据库,仅使用ArrayAdapter。我建议覆盖活动1中的onResume()方法,并在其中包含刷新阵列适配器的代码,这是通过使用[YourListViewAdapter].notifyDataSangeetched()完成的 如果
本例假设未使用任何数据库,仅使用ArrayAdapter。我建议覆盖活动1中的
onResume()
方法,并在其中包含刷新阵列适配器的代码,这是通过使用[YourListViewAdapter].notifyDataSangeetched()完成的代码>
如果刷新列表时遇到问题,请阅读此内容:一个选项是使用第一个活动的onResume
@Override
public void onResume()
{ // After a pause OR at startup
super.onResume();
//Refresh your stuff here
}
或者,您可以为结果启动“活动”:
Intent i = new Intent(this, SecondActivity.class);
startActivityForResult(i, 1);
在secondActivity中,如果要发回数据:
Intent returnIntent = new Intent();
returnIntent.putExtra("result",result);
setResult(RESULT_OK,returnIntent);
finish();
如果不想返回数据:
Intent returnIntent = new Intent();
setResult(RESULT_CANCELED, returnIntent);
finish();
现在,在第一个Activity类中,为activityResult()方法编写以下代码
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == 1) {
if(resultCode == RESULT_OK){
//Update List
}
if (resultCode == RESULT_CANCELED) {
//Do nothing?
}
}
}//onActivityResult
如果不处理来自编辑活动的回调(使用onActivityResult),那么我宁愿将您提到的逻辑放在onStart中(或者可能放在onRestart中),因为将它放在onResume中似乎有些过分,因为更改只发生在onStop之后
无论如何,要熟悉。另外,请注意onRestoreInstanceState和onSaveInstanceState方法,这些方法不会出现在pretty生命周期图中
(另外,值得回顾一下如何处理您正在做的事情,尽管它确实使用了数据库。)我认为onRestart()更适合于此
@Override
public void onRestart() {
super.onRestart();
//When BACK BUTTON is pressed, the activity on the stack is restarted
//Do what you want on the refresh procedure here
}
您可以在onRestart()内编写重新启动活动(再次从事件“按下后退按钮”调用)时要执行的操作
例如,如果要执行与在onCreate()中相同的操作,请将代码粘贴到onRestart()中(例如,使用更新的值重建UI) 主要是:
@Override
public void onRestart()
{
super.onRestart();
finish();
startActivity(getIntent());
}
最好的方法是使用
Intent i = new Intent(this.myActivity, SecondActivity.class);
startActivityForResult(i, 1);
我只有收藏夹类别,因此当我单击收藏夹中的项目时,会显示此类信息,如果我不喜欢,则应将此项目从收藏夹中删除:为此,我刷新数据库并将其设置为适配器(用于recyclerview)[我希望您了解我的问题和解决方案]如果您想刷新以前的活动,这一解决方案应在以下方面发挥作用:
在要刷新的上一个活动中:
@Override
public void onRestart()
{
super.onRestart();
// do some stuff here
}
试试这个
public void refreshActivity() {
Intent i = new Intent(this, MainActivity.class);
i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(i);
finish();
}
还是碎片
public void refreshActivity() {
Intent i = new Intent(getActivity(), MainActivity.class);
i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(i);
finish();
}
并将此方法添加到onBackPressed()中,如
就这样
@Override
public void onBackPressed() {
Intent intent = new Intent(this,DesiredActivity.class);
startActivity(intent);
super.onBackPressed();
}
在前面的活动中,请使用此代码。这将实现平稳过渡,并在您按“上一步”按钮返回时重新加载活动。onRestart()应能更好地工作。onResume()将被调用两次,而onRestart()将仅在按下“上一步”按钮时被调用。这很简单,但我必须说:显然,最好将onCreate()代码移动到一个单独的方法中,然后从onCreate()和onRestart()调用该方法,而不是复制粘贴它。您还可以使用onCreate()仅用于膨胀视图和实例化全局变量,并使用onStart()分配/(重新)设置它们。因此,每当活动开始时,都会调用init()(或您想调用它的任何名称);i、 在onCreate()或onRestart()之后。如果需要重新初始化活动的ViewModel,这非常有用。让它再次从数据库中获取,设置实例变量…我猜这将转到当前活动而不是上一个活动?我有相同的问题,除了我的是一个片段而不是活动。因此,我遵循这里的建议,它的工作:考虑添加一些解释,如果我不想完成当前的活动,并希望以前的活动是什么updated@Waza_BeonResume
没有给我打电话,知道为什么吗?(我也尝试了onRestart
和onPause
,但都没有被调用)在我的情况下,我已经从片段转到活动。所以,当从活动返回到片段时,正如其他答案提到的onRestart(),它不包含在片段中,所以,这个答案对我很有用。对于一个片段,您可以使用onResume()。这个问题已经有几年了,提供的答案被标记为低质量帖子以供审阅。以下是一些指导原则。还有其他一些答案提供了OP的问题,它们是在一段时间前发布的。在发布答案时,请确保您添加了新的解决方案或更好的解释,尤其是在回答旧问题时。您能否在代码中添加一些说明,并感谢您的发布。
@Override
public void onBackPressed() {
refreshActivity();
super.onBackPressed();
}
}
@Override
public void onBackPressed() {
Intent intent = new Intent(this,DesiredActivity.class);
startActivity(intent);
super.onBackPressed();
}
@Override
protected void onRestart() {
super.onRestart();
finish();
overridePendingTransition(0, 0);
startActivity(getIntent());
overridePendingTransition(0, 0);
}