Android 在活动 recreate() 上进行转换
Posted
技术标签:
【中文标题】Android 在活动 recreate() 上进行转换【英文标题】:Android make transition on activity recreate() 【发布时间】:2017-06-26 12:04:12 【问题描述】:我想在更改主题后在活动 recreate() 上放置一个过渡,可以吗?
我试过了: @android:anim/fade_in @android:anim/fade_out 但它不起作用,这也会影响我打开和关闭活动时的过渡,但我不希望这样
【问题讨论】:
【参考方案1】:完成@Yaro 的回答,
在onCreate
内部,如果savedInstanceState 为null,请尝试intent extras。仅当您使用捆绑包调用 super.onCreate
时,视图的状态才会正确恢复。
public class ExampleActivity extends Activity
@Override
protected void onCreate(@Nullable Bundle savedInstanceState)
//setTheme(whatever);
super.onCreate(savedInstanceState != null ? savedInstanceState : getIntent().getBundleExtra("saved_state"));
protected void transitionRecreate()
Bundle bundle = new Bundle();
onSaveInstanceState(bundle);
Intent intent = new Intent(this, getClass());
intent.putExtra("saved_state", bundle);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);
overridePendingTransition(android.R.anim.fade_in, android.R.anim.fade_out);
为我工作,您可以使用 finish()
代替 CLEAR_TOP
标志
【讨论】:
【参考方案2】:为了使用@Arunava 的回答“保存状态”,请执行此操作
Activity mCurrentActivity = getActivity();
Intent intent = getActivity().getIntent();
Bundle tempBundle = new Bundle();
intent.putExtra("bundle", tempBundle);
mCurrentActivity.finish();
mCurrentActivity.overridePendingTransition(R.anim.transition_for_incoming_activity, R.anim.transition_for_outgoing_activity);
mCurrentActivity.startActivity(intent);
然后在 Activity 的 onCreate 中执行此操作
@Override
protected void onCreate(Bundle savedInstanceState)
super.onCreate(savedInstanceState);
if (getIntent().hasExtra("bundle"))
//Insert a method to display the activity or fragment that triggered the activity to restart
super.onResume();
【讨论】:
【参考方案3】:你可以用这个代替 recreate()
Activity mCurrentActivity = getActivity();
...
mCurrentActivity.finish();
mCurrentActivity.overridePendingTransition(R.anim.transition_for_incoming_activity, R.anim.transition_for_outgoing_activity);
mCurrentActivity.startActivity(mCurrentActivity.getIntent());
【讨论】:
这不会保存instanceState以上是关于Android 在活动 recreate() 上进行转换的主要内容,如果未能解决你的问题,请参考以下文章
onBackPressed 在 recreate() 后不调用