2015-08-26 34 views
0

目前,我的ViewPager工作是这样的:如何防止Viewpager在旋转后变为空白?

enter image description here

enter image description here

enter image description here

但之后,我旋转设备,我viewpager变成空白,并有两个箭头的每一页,这样:

enter image description here

这里是我的活动代码:

public class MainViewPagerHelper { 
    private static MainViewPagerHelper sViewPagerHelper = null; 
    private Activity mActivity; 
    private MainViewPagerAdapter adapter; 

    public MainViewPagerHelper(Activity activity) { 
     this.mActivity = activity; 
    } 

    public static MainViewPagerHelper getInstance(Activity activity) { 
     if (sViewPagerHelper == null) { 
      sViewPagerHelper = new MainViewPagerHelper(activity); 
     } 
     return sViewPagerHelper; 
    } 

    public void dateBarFunction() throws ParseException { 


     mDateAreaSlider = (ViewPager) mActivity.findViewById(R.id.date_area); 
     adapter = new MainViewPagerAdapter(mActivity, getDateList()); 
     mDateAreaSlider.setAdapter(adapter); 
     mDateAreaSlider.setCurrentItem(adapter.DateList.length - 1); 
     mDateAreaSlider.setOffscreenPageLimit(2); 
     mButtonBack = (ImageView) mActivity.findViewById(R.id.btn_back_main); 
     mButtonNext = (ImageView) mActivity.findViewById(R.id.btn_next_main); 


     // Hide right arrow if reach last position at first launch 
     if (mDateAreaSlider.getCurrentItem() == adapter.DateList.length - 1) { 
      mButtonNext.setVisibility(View.INVISIBLE); 
     } 

     // Hide left arrow if reach first position at first launch 
     if (mDateAreaSlider.getCurrentItem() == 0) { 
      mButtonBack.setVisibility(View.INVISIBLE); 
     } 

     // Hide both arrows if there is just 1 date 
     if (adapter.getCount() == 1) { 
      mButtonNext.setVisibility(View.INVISIBLE); 
      mButtonBack.setVisibility(View.INVISIBLE); 
     } 
     slideToDrawMap(); 
    } 

    public void slideToDrawMap() { 
     final ViewPager.OnPageChangeListener onPageChangeListener = new ViewPager.OnPageChangeListener() { 
      @Override 
      public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { 

      } 

      @Override 
      public void onPageSelected(int position) { 

       // Draw map 
       String date = adapter.DateList[position].getDate(); 

       try { 

        // Scroll to item in timeline 
        mTimeLineHelper = TimeLineHelper.getInstance(mActivity); 
        mTimeLineHelper.scrollToDateSelected(date); 
        mDrawMap.drawStayPointAndRoute(date); 

       } catch (ParseException e) { 
        // TODO Auto-generated catch block 
        e.printStackTrace(); 
       } 

       if (position == adapter.DateList.length - 1) { 
        mButtonNext.setVisibility(View.INVISIBLE); 
        mButtonBack.setVisibility(View.VISIBLE); 
       } 

       // Hide left arrow if reach first position 
       else if (position == 0) { 
        mButtonBack.setVisibility(View.INVISIBLE); 
        mButtonNext.setVisibility(View.VISIBLE); 
       } 

       // Else show both arrows 
       else { 
        mButtonBack.setVisibility(View.VISIBLE); 
        mButtonNext.setVisibility(View.VISIBLE); 
       } 
      } 

      @Override 
      public void onPageScrollStateChanged(int state) { 

      } 
     }; 
     mDateAreaSlider.addOnPageChangeListener(onPageChangeListener); 
    } 

这里是我的适配器:

public class MainViewPagerAdapter extends PagerAdapter { 
    public CalendarModel[] DateList; 
    private Context mContext; 
    private LayoutInflater mInflater; 
    private RelativeLayout mDateAreaLayoutInflated; 

    public MainViewPagerAdapter(Context mContext, CalendarModel[] mDateList) { 
     this.mContext = mContext; 
     this.DateList = mDateList; 

    } 

    @Override 
    public boolean isViewFromObject(View view, Object object) { 
     return view == ((RelativeLayout) object); 
    } 

    @Override 
    public Object instantiateItem(final ViewGroup container, final int position) { 

     //Just instantiate items,nothing special here 

    } 

    @Override 
    public void destroyItem(ViewGroup container, int position, Object object) { 
     ((ViewPager) container).removeView((RelativeLayout) object); 

    } 

    @Override 
    public int getCount() { 
     return DateList.length; 
    } 

请告诉我这是为什么发生,如何解决this.Thank你!

+0

对不起,但第一个代码示例不是活动。 –

+0

这只是一个帮手类,你可以看到我把我的活动传递给它;)。在我的活动中,我只是调用方法dateBarFunction() –

+0

尝试将此行添加到清单中的活动标记:android:configChanges =“orientation | screenSize”' – KrisPrajapati

回答

0

这已经有一段时间,但对我来说,解决办法是通过一个空包在活动onCreate方法:

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(null); //otherwise the viewpager is blank on rotation. 
    ... 
} 

貌似viewpager保留上旋转一些值,我们不希望出现这种情况。

+0

没有为我工作。 – dazed