2014-11-03 143 views
0

我真的很奇怪的問題。 在我的活動中,我有ViewPager,因爲我想顯示不同的屏幕。 每個屏幕都必須顯示自己的字符串。 我的想法是創建一個活動,一個ViewPager和一個片段,其中包含有關哪個字符串必須顯示的邏輯和信息。Android:旋轉後錯誤的ViewPager屏幕

這是我的活動:

private PagerAdapter pagerAdapter; 
private ViewPager mViewPager; 

@Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     setContentView(R.layout.wizard_layout); 

     pagerAdapter = new PagerAdapter(getFragmentManager()); 
     maxPages = pagerAdapter.getCount(); 

     // Set up the ViewPager with the sections adapter. 
     mViewPager = (ViewPager) findViewById(R.id.pager); 
     mViewPager.setAdapter(pagerAdapter);  

     mViewPager.setOnPageChangeListener(this); 
    } 

這是我的傳呼機適配器

public class PagerAdapter extends FragmentPagerAdapter { 
     public PagerAdapter(FragmentManager fm) { 
      super(fm); 
     } 

     @Override 
     public Fragment getItem(int position) { 
      switch (position) { 
      case 0: 
      case 1: 
      case 2: 
      case 3: 
      case 4: 
       return StepWelcomeFragment.newInstance(position); 
      } 
      return null;    
     } 

     @Override 
     public int getCount() { 
      return 5; 
     } 
    } 

這是我唯一的一個片段

public static class StepWelcomeFragment extends Fragment { 
     private int sectionNumber; 

     private static final String ARG_SECTION_NUMBER = "section_number"; 

     public static StepWelcomeFragment newInstance(int sectionNumber) { 
      StepWelcomeFragment fragment = new StepWelcomeFragment(); 
      Bundle args = new Bundle(); 
      args.putInt(ARG_SECTION_NUMBER, sectionNumber); 
      fragment.setArguments(args); 
      fragment.sectionNumber = sectionNumber; 
      return fragment; 
     } 

     public StepWelcomeFragment() { 
     } 

     @Override 
     public View onCreateView(LayoutInflater inflater, ViewGroup container, 
       Bundle savedInstanceState) { 
      View rootView = inflater.inflate(R.layout.wizard_welcome_step_layout, 
        container, false); 
      switch(sectionNumber){ 
      case 0:  
       showString0(); break; 

      case 1: 
       showString1(); break; 

      case 2: 
       showString2(); break; 

      case 3: 
       showString3(); break; 

      case 4: 
       showString4(); break; 
      default: break; 
      }      
      return rootView;   
     } 
    } 

我使用可變sectionNumber以存儲(在片段本身內)關於哪個屏幕具有焦點的信息。

它工作正常。 但是,當我旋轉設備時,活動被破壞並重新創建(正常情況下),但是我在屏幕上看到的總是sting0。 如果我導航屏幕滑動,在每個新屏幕(再次,只是在旋轉後)都將顯示爲String0。 sectionNumber連續0. 此外,即使沒有保存狀態,當我旋轉顯示當前屏幕,我的期望是,旋轉後應顯示屏幕0(我錯了嗎?)。 看起來像活動不會重新創建新的適配器和新的片段。 我在做什麼錯? 爲什麼在旋轉之後,活動並沒有被殺死並被正確地重新創建? 我想保存沒有數據,對我來說可以摧毀和重建,但爲什麼它不? 很多謝謝

回答

0

好的,我買了我的自我。 這已經足夠將

@Override 
    protected void onSaveInstanceState(Bundle outState) { 
     /* Save which screen in visible */ 
     //super.onSaveInstanceState(outState); 
     outState.putInt(currentViewTag, mViewPager.getCurrentItem()); 
    } 

但沒有super.onSaveInstanceState(outState);否則它保存視圖的狀態,而不是從頭開始重新創建。