ViewPager数据加载错乱的问题

利用ViewPager作了一个滑动页面,发现里面的图片和对应的页数都是错乱的,后来发现是在调用方法的地方不对,因此记录下来,希望对大家有用
package me.quantumti.masktime.adapter;  
  
import java.util.List;  
import android.support.v4.view.PagerAdapter;  
import android.support.v4.view.ViewPager;  
import android.view.View;  
  
public class MaskPlanViewPagerAdapter extends PagerAdapter  
{  
    private List<View> mpViews;  
      
    public MaskPlanViewPagerAdapter(List<View> mpViews)  
    {  
        this.mpViews = mpViews;  
    }  
      
    @Override  
    public void destroyItem(View arg0, int arg1, Object arg2)  
    {  
        View view = mpViews.get(arg1);  
        if(null != view)  
        {  
            ((ViewPager)arg0).removeView(view);  
        }  
    }  
      
    @Override  
    public int getCount()  
    {  
        return mpViews.size();  
    }  
      
    @Override  
    public Object instantiateItem(View view, int position)  
    {  
        ((ViewPager)view).addView(mpViews.get(position));  
          
        return mpViews.get(position);  
    }  
      
    @Override  
    public boolean isViewFromObject(View arg0, Object arg1)  
    {  
        return arg0 == arg1;  
    }  
}  

数据的加载不能放在 instantiateItem() 方法中去处理,下面是调用方法的地方

@ViewById(R.id.vp_mask_plan)  
  
ViewPager vPager;  
  
  
  
vPager.setOnPageChangeListener(new OnPageChangeListener()  
        {  
            @Override  
            public void onPageSelected(int currentPageIndex)  
            {  
                currentPage = currentPageIndex;  
                tvPrg.setText((currentPageIndex + 1) + "/" + dataLen);  
                  
                  
                loadDatas(currentPageIndex);  
            }  
              
            @Override  
            public void onPageScrolled(int arg0, float arg1, int arg2)  
            {  
            }  
              
            @Override  
            public void onPageScrollStateChanged(int arg0)  
            {  
            }  
});  
  
  
  
private void loadDatas(int position)  
    {  
        final MyPlanDetail plan = mpDatas.get(position);  
        View view = mpViews.get(position);  
        ImageView ivPlanCover = (ImageView)view.findViewById(R.id.iv_plan_cover_full);  
        TextView tvPlanName = (TextView)view.findViewById(R.id.tv_plan_title);  
        TextView tvPlanSchedule = (TextView)view.findViewById(R.id.tv_plan_schedule);  
        TextView tvPlanNextTime = (TextView)view.findViewById(R.id.tv_plan_next);  
          
        LinearLayout llTitls = (LinearLayout)view.findViewById(R.id.ll_plan_title);  
          
        llTitls.setOnClickListener(new OnClickListener()  
        {  
              
            @Override  
            public void onClick(View v)  
            {  
                PlanDetailActivity_.intent(getActivity()).planId(plan.getPlanId()).start();  
                aUtils.leftInAnimation(getActivity());  
            }  
        });  
          
        ivPlanCover.setOnClickListener(new OnClickListener()  
        {  
              
            @Override  
            public void onClick(View v)  
            {  
                MyPlanDetailsActivity_.intent(getActivity()).planId(plan.getPlanId()).maskId(plan.getMaskdetail_id()).start();  
                aUtils.leftInAnimation(getActivity());  
            }  
        });  
          
        Picasso.with(getActivity()).load(mUtils.formatImgUrl(plan.getIcon())).into(ivPlanCover);  
        tvPlanName.setText(plan.getTitle());  
        tvPlanSchedule.setText(plan.getCurrentNum() + "/" + plan.getMaskNum());  
          
        int nextInterval = plan.getNextInterval();  
        tvPlanNextTime.setText(getActivity().getResources().getString(R.string.plan_fragment_plan_next_time_text) + mUtils.getNextTime(nextInterval));  
          
}  


猜你喜欢

转载自blog.csdn.net/xifei66/article/details/76465990