Android 在 Activity recreate() 上进行转换

问题描述 投票:0回答:4

我想在更改主题后在 Activity recreate() 上进行转换,可以吗?

我尝试过: @android:anim/fade_in @android:anim/fade_out 但它不起作用,这也会影响我打开和关闭活动时的转换,但我不希望这样

android animation android-activity transition recreate
4个回答
2
投票

完成@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
标志


1
投票

为了使用@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();
}

0
投票

我实际上只是发现重新创建忽略了主题中设置的动画,所以我需要手动执行此操作:

override fun recreate() {
    finish()
    startActivity(Intent<InstrumentsActivity>(this))
}

因此,我只是在我已经使用的活动子类中重写重新创建,而不是调用它。

我不使用

savedInstanceState
,所以不需要处理其他任何事情..


-2
投票

你可以用它来代替 recreate()

Activity mCurrentActivity = getActivity();
...
mCurrentActivity.finish();
mCurrentActivity.overridePendingTransition(R.anim.transition_for_incoming_activity, R.anim.transition_for_outgoing_activity);
mCurrentActivity.startActivity(mCurrentActivity.getIntent());
© www.soinside.com 2019 - 2024. All rights reserved.