Ste*_*ley 113
更新:Android SDK 11 为活动添加了recreate()方法.
我通过简单地重用启动活动的意图来做到这一点.recreate()在您的班级中定义一个意图并在starterIntent使用中分配它onCreate().然后,当您想要重新启动活动时,请致电starterIntent = getIntent();
它不是一个非常优雅的解决方案,但它是一种重新启动活动并强制重新加载所有内容的简单方法.
Tim*_*mmm 35
在这里结合一些答案,您可以使用以下内容.
class BaseActivity extends SherlockFragmentActivity
{
// Backwards compatible recreate().
@Override
public void recreate()
{
if (android.os.Build.VERSION.SDK_INT >= 11)
{
super.recreate();
}
else
{
startActivity(getIntent());
finish();
}
}
}
Run Code Online (Sandbox Code Playgroud)
我测试了一下,有一些问题:
startActivity(...); finish();仅存在应用程序并且不会重新启动活动.super.recreate()实际上并不像完全重新创建活动一样.它相当于旋转设备,所以如果你有任何Fragments,setRetainInstance(true)它们将不会被重建; 只是暂停并恢复.所以目前我不相信有一个可以接受的解决方案.
Ayu*_*yal 21
当我需要重新启动活动时,我使用以下代码.虽然不推荐.
Intent intent = getIntent();
finish();
startActivity(intent);
Run Code Online (Sandbox Code Playgroud)
fla*_*yte 21
打电话recreate()给你Activity.但是,此方法会在重新创建活动期间出现闪烁的黑屏.
finish();
startActivity(getIntent());
Run Code Online (Sandbox Code Playgroud)
这里没有"闪烁"的黑色屏幕,但你会看到旧的和新的实例之间的过渡,并且有一个不那么令人愉快的黑色背景.我们可以做得更好.
要解决此问题,我们可以添加一个调用overridePendingTransition():
finish();
startActivity(getIntent());
overridePendingTransition(0, 0);
Run Code Online (Sandbox Code Playgroud)
再见黑屏,但在我的情况下,我仍然会在彩色背景上看到某种过渡(淡入淡出的动画).这是因为您在创建新活动之前完成活动的当前实例并变得完全可见,而中间颜色是windowBackground主题属性的值.
startActivity(getIntent());
finish();
Run Code Online (Sandbox Code Playgroud)
调用finish() 之后 startActivity()将使用活动之间的默认过渡,通常使用一些滑入式动画.但过渡仍然可见.
startActivity(getIntent());
finish();
overridePendingTransition(0, 0);
Run Code Online (Sandbox Code Playgroud)
对我来说,这是最好的解决方案,因为它重新启动活动而没有任何可见的转换,就像没有发生任何事情一样.
例如,在您的应用程序中,您可以使用一种独立于系统语言更改显示语言的方法.在这种情况下,每当用户更改应用程序的语言时,您可能希望在没有转换的情况下重新启动活动,从而使语言切换看起来很快.
对于11之前的API,您无法使用recreate().我这样解决了:
Bundle temp_bundle = new Bundle();
onSaveInstanceState(temp_bundle);
Intent intent = new Intent(this, MainActivity.class);
intent.putExtra("bundle", temp_bundle);
startActivity(intent);
finish();
Run Code Online (Sandbox Code Playgroud)
并在onCreate ..
@Override
public void onCreate(Bundle savedInstanceState) {
if (getIntent().hasExtra("bundle") && savedInstanceState==null){
savedInstanceState = getIntent().getExtras().getBundle("bundle");
}
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//code
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
115894 次 |
| 最近记录: |