使用“onStart”方法时如何声明savedInstanceState

可以if (savedInstanceState == null) {...}在onStart我的片段的方法中使用吗?每当我在onCreate方法中使用它时,我的片段都显示为空白。


public class MyActivity extends AppCompatActivity {

    private static final String TAG = MyActivity.class.getSimpleName();


    private Boolean mCurrentValue;


    @Override

    public void onCreate(Bundle savedInstanceState) {

        Log.d(TAG, "onCreate:::: retrieving preferences");

        SharedPreferences mSharedPreferences = PreferenceManager.getDefaultSharedPreferences(this);

        mCurrentValue = mSharedPreferences.getBoolean("my_preference", false);

        Log.d(TAG, "onCreate:::: my_preference and mCurrentValue=" + mCurrentValue);

        if (mCurrentValue) {

            setTheme(R.style.MyDarkAppCompatTheme);

            Log.d(TAG, "onCreate:::: setTheme:MyDarkAppCompatNoActionBarTheme");

        } else {

            setTheme(R.style.MyLightTheme);

            Log.d(TAG, "onCreate:::: setTheme:MyLightAppCompatNoActionBarTheme");

        }


        super.onCreate(savedInstanceState);


        setContentView(R.layout.my_activity);


        if (savedInstanceState == null) {


        }

    }



    // in order to recreate Activity we must check value here because when we come back from another Activity onCreate doesn't called again

    @Override

    protected void onStart() {

        super.onStart();


        setContentView(R.layout.my_activity);


        SharedPreferences mSharedPreferences = PreferenceManager.getDefaultSharedPreferences(this);

        Boolean mNewValue = mSharedPreferences.getBoolean("my_preference", false);

        // if value differs from previous Theme, we recreate Activity

        if(mCurrentValue != mNewValue){

            recreate();

        }


        MyFragment newFragment = new MyFragment();

        FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();

        transaction.replace(R.id.detail_container, newFragment);

        transaction.commit();

    }

}



HUWWW
浏览 119回答 1
1回答

慕码人2483693

不可以。如果您需要访问保存的数据片段,您需要从 onCreate 中的 savedInstanceState Bundle 中提取它们,并将它们保存为您的 Activity 中的字段。如果您只需要检测此 Activity 是否已重新创建(与检查 savedInstanceState 是否为 null 一样常见),您可以在 Activity 中声明一个布尔字段,并在savedInstanceState 在范围内时将其设置在 onCreate 中,然后在开始:private boolean activityRecreated;@Overridepublic void onCreate(Bundle savedInstanceState) {    super.onCreate(savedInstanceState);    activityRecreated = savedInstanceState != null;}@Overridepublic void onStart() {    if (activityRecreated) {       // code here    }}编辑:获得有关您要保存的状态的更多信息后,请尝试以下操作:您的活动中应该有一个字段来跟踪 ViewPager 的状态。此标签保存用户所在的选项卡。它可以是 String 标签或 Id (int) 标签。您应该通过在您的活动中覆盖 onSaveInstanceState 来保存它:private int tabIndex = 0 // NOTE: get this from your ViewPager's PagerAdapter@Overrideprotected void onSaveInstanceState(Bundle outState) {    super.onSaveInstanceState(outState);    outState.putInt("tabIndex", tabIndex)}然后,在 onCreate 中,您可以检索此值:@Overrideprotected void onCreate(@Nullable Bundle savedInstanceState) {    super.onCreate(savedInstanceState);    if (savedInstanceState != null) {      tabIndex = savedInstanceState.getInt("tabIndex", 0);      // here, make sure your ViewPager's PagerAdapter is created and set it to this tab    }    // rest of your onCreate goes here}以这种方式保存标签索引将允许在正确的 ViewPager 标签可见的情况下重新创建活动。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java