簡體   English   中英

在方向更改時保存Fragment的狀態(savedInstanceState)

[英]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輸出),然后調用savedInstanceStateelse 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM