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() 后不调用

在android 9上重新创建活动引发黑屏

无法在片段中解析方法'recreate()'

调用 recreate() 方法时 TextInputLayout 提示不会刷新

可以给 recreate() 一个过渡动画吗?

Android学习笔记(35):Android活动条