【问题标题】:Android make transition on activity recreate()Android 在活动 recreate() 上进行转换
【发布时间】:2017-06-26 12:04:12
【问题描述】:

我想在更改主题后在活动 recreate() 上放置一个过渡,可以吗?

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

【问题讨论】:

    标签: android animation android-activity transition recreate


    【解决方案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
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-03-24
        • 2014-12-21
        • 1970-01-01
        • 1970-01-01
        • 2015-02-05
        • 2015-07-09
        相关资源
        最近更新 更多