2014-11-03 3 views
0

정말 이상한 문제가 있습니다. 다른 액티비티를 표시하고 싶기 때문에 ViewPager가 있습니다. 모든 화면은 자체 문자열을 표시해야합니다. 제 아이디어는 하나의 액티비티, 하나의 ViewPager와 하나의 프래그먼트를 생성하는 것입니다. 여기에는 어떤 String에 대한 로직과 정보가 포함되어 있습니다. 이것은 내가하기 위해 변수 sectionNumber을 사용하고Android : 회전 후 ViewPager의 잘못된 화면

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;   
     } 
    } 

내 호출기 어댑터

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; 
     } 
    } 

이것은 내 하나 개의 조각이

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); 
    } 

입니다 :

내 활동입니다 어떤 화면에 포커스가 있는지에 대한 정보 (조각 자체 안에) 저장.

잘 작동합니다. 하지만 기기를 돌리면 활동이 파괴되고 다시 생성되지만 (평소대로) 화면에 표시되는 내용은 항상 sting0입니다. 화면 스 와이프를 탐색해도 상관 없습니다. 모든 새 화면에서 (다시 한번 회전 한 후) 단지 String0이 표시됩니다. sectionNumber은 계속 0입니다. 또한 상태를 저장하지 않아도 회전 할 때 현재 화면이 표시되고 회전 후 화면 0으로 표시되어야합니다 (잘못된 것인가?). Activity와 (과) 같이 새 어댑터와 새 프래그먼트가 다시 생성되지 않습니다. 내가 뭘 잘못하고 있니? 회전 후 활동이 제대로 종료되지 않고 다시 생성되지 않는 이유는 무엇입니까? 데이터를 저장하지 않으려면 나에게 파괴하고 다시 작성하는 것이 좋지만 왜 그렇지 않은 것입니까? 많은 감사합니다

답변

0

좋아, 나는 내 자신을 사야했다. 그것은 충분히

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

를 추가했지만 super.onSaveInstanceState(outState);없이 그렇지 않으면보기의 상태를 저장하는 대신 처음부터 다시 작성하십시오.

관련 문제