![](/img/trans.png)
[英]How to pass a parameter to @onStart method in MyListener Class or to run a method before @onStart
[英]How to declare savedInstanceState when using 'onStart' method
是否可以在片段的onStart
方法中使用if (savedInstanceState == null) {...}
? 每當我在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();
}
}
否。如果需要訪問已保存的數據,則需要從onCreate的savedInstanceState捆綁包中提取數據並將其另存為Activity中的字段。 如果您只需要檢測是否重新創建了此Activity(與通常情況下是否檢查saveInstanceState為null相同),則可以在Activity中聲明一個布爾字段,並在saveInstanceState在范圍內時在onCreate中進行設置,然后在其中訪問它。在onStart:
private boolean activityRecreated;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
activityRecreated = savedInstanceState != null;
}
@Override
public void onStart() {
if (activityRecreated) {
// code here
}
}
編輯:獲得有關您要保存的狀態的更多信息后,請嘗試以下操作:您應該在Activity中有一個跟蹤ViewPager狀態的字段。 此標記保存用戶所在的選項卡。 它可以是String標記或Id(int)標記。 您應該通過重寫Activity中的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選項卡的情況下重新創建活動。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.