在 Android 中重新加载Activity
是一个好习惯吗?
最好的方法是什么? this.finish
,然后this.startActivity
,其活动为Intent
?
答案 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)
最好的做法是确保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);