这几天,利用ViewPager作了一个滑动页面,发现里面的数据都是错乱的,后来发现加载数据的时机不对,特在此做一个笔记,备忘~~
这是Adapter;
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));
}