为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

HUWWW 2021-09-12 16:29:31
可以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();    }}
查看完整描述

1 回答

?
慕码人2483693

TA贡献1860条经验 获得超9个赞

不可以。如果您需要访问保存的数据片段,您需要从 onCreate 中的 savedInstanceState Bundle 中提取它们,并将它们保存为您的 Activity 中的字段。如果您只需要检测此 Activity 是否已重新创建(与检查 savedInstanceState 是否为 null 一样常见),您可以在 Activity 中声明一个布尔字段,并在savedInstanceState 在范围内时将其设置在 onCreate 中,然后在开始:


private boolean activityRecreated;


@Override

public void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);

    activityRecreated = savedInstanceState != null;

}


@Override

public void onStart() {

    if (activityRecreated) {

       // code here

    }

}

编辑:获得有关您要保存的状态的更多信息后,请尝试以下操作:您的活动中应该有一个字段来跟踪 ViewPager 的状态。此标签保存用户所在的选项卡。它可以是 String 标签或 Id (int) 标签。您应该通过在您的活动中覆盖 onSaveInstanceState 来保存它:


private int tabIndex = 0 // NOTE: get this from your ViewPager's PagerAdapter

@Override

protected void onSaveInstanceState(Bundle outState) {

    super.onSaveInstanceState(outState);

    outState.putInt("tabIndex", tabIndex)

}

然后,在 onCreate 中,您可以检索此值:


@Override

protected 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 标签可见的情况下重新创建活动。


查看完整回答
反对 回复 2021-09-12
  • 1 回答
  • 0 关注
  • 112 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信