在Android中重新加载活动

时间:2010-06-16 13:41:47

标签: android android-activity

Android 中重新加载Activity是一个好习惯吗?

最好的方法是什么? this.finish,然后this.startActivity,其活动为Intent

18 个答案:

答案 0 :(得分:450)

您可以使用

finish();
startActivity(getIntent());

从内部刷新Activity

答案 1 :(得分:37)

这是我在更改从首选项更改返回后重新加载活动的方法。

@Override
protected void onResume() {

   super.onResume();
   this.onCreate(null);
}

这实际上会导致活动重绘。

已更新:更好的方法是调用recreate()方法。这将导致重新创建活动。

答案 2 :(得分:36)

对于那些不想看到在重新创建()方法后闪烁的人,只需使用

 finish();
 overridePendingTransition(0, 0);
 startActivity(getIntent());
 overridePendingTransition(0, 0);

答案 3 :(得分:10)

我需要快速更新我的某个应用程序中的消息列表,所以在关闭我所在的对话框之前,我刚刚刷新了我的主UI活动。我确信有更好的方法可以实现这一点。同样。

// Refresh main activity upon close of dialog box
Intent refresh = new Intent(this, clsMainUIActivity.class);
startActivity(refresh);
this.finish(); //

答案 4 :(得分:9)

Android包括一个处理活动创建和销毁的流程管理系统,这在很大程度上抵消了您手动重启活动所带来的任何好处。您可以在Application Fundamentals

查看有关该信息的更多信息

最好的做法是确保onPause和onStop方法释放您不需要保留的任何资源,并使用onLowMemory将您的活动需求减少到绝对最小值。

答案 5 :(得分:8)

我看到了之前使用Intent重新加载活动的答案。这些可以工作,但你也可以使用Activity类本身给出的recreate()方法。

而不是写这个

//关闭对话框后刷新主要活动

Intent refresh = new Intent(this, clsMainUIActivity.class);
startActivity(refresh);
this.finish();

这可以通过仅写这个

来完成
recreate();

答案 6 :(得分:7)

只需使用

this.recreate();

这将触发活动中的onCreate方法

答案 7 :(得分:6)

从同一个activity开始,然后关闭activity

Intent refresh = new Intent(this, Main.class);
startActivity(refresh);//Start the same Activity
finish(); //finish Activity.

答案 8 :(得分:3)

在某些情况下,这是其他方面的最佳做法,这不是一个好主意,它是由上下文驱动的 如果您选择使用以下内容这是从活动传递给她的儿子的最佳方式:

    Intent i = new Intent(myCurrentActivityName.this,activityIWishToRun.class);    
    startActivityForResult(i, GlobalDataStore.STATIC_INTEGER_VALUE);

事情是每当你完成()来自activityIWishToRun,你就会回到你的生活活动

答案 9 :(得分:2)

我有同样的问题

import android.support.v4.content.IntentCompat;

intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK |IntentCompat.FLAG_ACTIVITY_CLEAR_TASK);

这段代码对我有用。 Android api 17

答案 10 :(得分:1)

经过一段时间的实验,我发现重新启动活动没有意外的后果。此外,我认为这与Android在方向更改时默认情况非常类似,因此我没有理由不在类似的情况下执行此操作。

答案 11 :(得分:1)

我认为这不是一个好主意......实施更清洁的方法会更好。例如,如果您的活动包含表单,则清理方法可以清除表单中的每个窗口小部件并删除所有临时数据。我想这就是你想要的:将活动恢复到初始状态。

答案 12 :(得分:1)

在活动中,您可以调用recreate()来“重新创建”该活动(API 11 +)

答案 13 :(得分:1)

重新加载整个活动可能是一项繁重的任务。 只需将必须刷新的部分代码放在(kotlin)中:

override fun onResume() {
    super.onResume()
    //here...
}

Java:

@Override
public void onResume(){
    super.onResume();
    //here...

}

并在需要时调用“ onResume()”。

答案 14 :(得分:0)

我有另一种方法:将我的活动的<!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title>AngularJS Plunker</title> <script>document.write('<base href="' + document.location + '" />');</script> <link rel="stylesheet" href="style.css" /> <script data-require="angular.js@1.4.x" src="https://code.angularjs.org/1.4.12/angular.js" data-semver="1.4.9"></script> <script src="app.js"></script> </head> <body ng-app="plunker" ng-controller="MainCtrl"> <select class="form-control" name="country" ng-model="user.country"> <option value="">choose country</option> <option ng-repeat="item in countries" value="{{item.name}}" ng-style="{'background-image':'url({{item.flag}})'}">{{item.name}}</option> </select> </body> </html>设置为launchMode而不调用singleTop,只需finish()即可完成工作。只需关注startActivity(getIntent())onCreate()中的新数据即可。按照Sush的方式,应用程序可能会像AMAN SINGH所说的那样闪烁。但AMAN SINGH的方法仍然会创造一种新的活动,即使他修复了“眨眼”,这种活动在某种程度上是不必要的。问题,我想。

这个问题太迟了,但是如果有人在寻找解决方案,那么就是这样。

答案 15 :(得分:0)

登录后我遇到了同样的问题,所以我用

@Override
protected void onRestart() {
    this.recreate();
    super.onRestart();
}

答案 16 :(得分:0)

我用了这个,没有 finish()

startActivity(getIntent());

答案 17 :(得分:0)

对我来说,它的工作不是创建另一个Intent,而是在相同的Intents上加载新数据。

    overridePendingTransition(0, 0);
    finish();
    overridePendingTransition(0, 0);
    startActivity(getIntent());
    overridePendingTransition(0, 0);