在ViewPager的選項卡中增加的Page多餘3個,如果在添加MapView的Page和間隔一個Page的那個Page直接切換,會導致地圖的Page中的MapView顯示黑色,代碼如下:
LayoutInflater inflater = getLayoutInflater();
//第一個普通的Page
view1 = inflater.inflate(R.layout.raininfo_page_1, null);
view2 = inflater.inflate(R.layout.raininfo_page_2, null);
//帶有MapView的Page
view3 = inflater.inflate(R.layout.raininfo_page_3, null);
views.add(view1);
views.add(view2);
views.add(view3);
viewPager.setAdapter(new MyViewPagerAdapter(views));
viewPager.setCurrentItem(0);
viewPager.setOnPageChangeListener(new MyOnPageChangeListener());
MyViewPagerAdapter的代碼:
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
container.removeView(mListViews.get(position));
}
@Override
public Object instantiateItem(ViewGroup container, int position) {
container.addView(mListViews.get(position), 0);
return mListViews.get(position);
}
@Override
public int getCount() {
return mListViews.size();
}
代碼運行後,初始顯示第一個Page,如果在第一個Page和第三個Page直接切換,就回發現,MapView會一直顯示黑色。解決的辦法,就是每次Adapter調用instantiateItem時重新生成加入MapView所在的Page
代碼如下(先加入Page1和Page2):
view1 = inflater.inflate(R.layout.raininfo_page_1, null);
view2 = inflater.inflate(R.layout.raininfo_page_2, null);
views.add(view1);
views.add(view2);
MyViewPagerAdapter的代碼(在Adapter的instantiateItem調用時加入Page3):
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
container.removeView((View) object);
}
@Override
public Object instantiateItem(ViewGroup container, int position) {
if(position==2){
LayoutInflater inflater = getLayoutInflater();
view3 = inflater.inflate(R.layout.raininfo_page_3, null);
stationSpreadPage=new RainInfoStationSpreadPage(RainInfoActivity.this,view3);
container.addView(view3, 0);
return view3;
}else{
container.addView(mListViews.get(position), 0);
return mListViews.get(position);
}
}
@Override
public int getCount() {
return mListViews.size()+1;
}
程序運行後,切換正常