我真的很奇怪的問題。 在我的活動中,我有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(我錯了嗎?)。 看起來像活動不會重新創建新的適配器和新的片段。 我在做什麼錯? 爲什麼在旋轉之後,活動並沒有被殺死並被正確地重新創建? 我想保存沒有數據,對我來說可以摧毀和重建,但爲什麼它不? 很多謝謝