[英]Save state of Fragment on orientation change (savedInstanceState)
我有一個包含兩個片段的導航抽屜:Fragment0和Fragment1我想保存方向更改時的狀態。
這是我的代碼:( 僅重要部分)
public class MainActivity extends Activity {
public int selectedPosition = 0;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
if (savedInstanceState == null){
selectItem(0);
Log.e("savedInstanceNull", "gets called "+selectedPosition);
} else {
selectedPosition=savedInstanceState.getInt("fragmentposition",0);
Log.v("Position get", ""+selectedPosition);
selectItem(selectedPosition);
}
}
private void selectItem(int position) {
// update the main content by replacing fragments
Fragment fragment = new PlanetFragment();
Bundle args = new Bundle();
args.putInt(PlanetFragment.ARG_PLANET_NUMBER, position);
fragment.setArguments(args);
switch(position){
case 0:
fragment = new Fragment0();
break;
case 1:
fragment = new Futtermittelliste();
break;
}
FragmentManager fragmentManager = getFragmentManager();
fragmentManager.beginTransaction().replace(R.id.content_frame, fragment).commit();
// update selected item and title, then close the drawer
mDrawerList.setItemChecked(position, true);
setTitle(mPlanetTitles[position]);
mDrawerLayout.closeDrawer(mDrawerList);
selectedPosition = position;
}
@Override
public void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
outState.putInt("fragmentposition", selectedPosition);
Log.v("Position saved", ""+selectedPosition);
}
}
LogCat:
04-01 18:46:58.455: V/Position saved(2077): 1
04-01 18:46:58.515: V/Position get(2077): 1
04-01 18:46:58.555: E/savedInstanceNull(2077): gets called 0
位置(1)被存儲(第一個LogCat輸出),然后調用savedInstanceState
的else statement
,並且我檢索了位置(1)(第二個LocCat輸出)但是現在,我不知道為什么, if (savedInstanceState == null)
再次被調用,這將設置selectItem(0)
而不是selectItem(1)
你知道為什么嗎? 提前致謝!
我想通了:
if (savedInstanceState != null){
selectedPosition=savedInstanceState.getInt("fragmentposition",0);
selectItem(selectedPosition);
} else {
selectItem(selectedPosition);
}
這可行。 我不知道為什么第一種方法不起作用,但也許我可以為任何人提供這種解決方案
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.