Issue1:ViewPgaer在实现轮播效果时出现白屏的问题
解决方法:对于第一种问题,我们定位的问题点是数据的问题,在原生组件ViewPager上,当轮播的view少于3张时就会出现这样的情况,针对这样的情况,很多人也是表示很无奈,所以,我们的应对方法就是将数据add成双份,这样就解决了这类白屏的问题了;而第二种问题,我们定位在执行了耗时操作(此处默认使用Handler),但是执行前没有清除滑动消息,导致动画错乱,进而出现轮播变快现象。代码如下:
private HomePagerAdapter adapter;
private List<View> mLists = new ArrayList<View>();
private List<String> imgUrlList = new ArrayList<>();
imgUrlList.clear();
if (null!= modelBean.getData().getAdvertBeans() && modelBean.getData().getAdvertBeans().size()>0){
if (modelBean.getData().getAdvertBeans().size() == 1){
for (int i = 0; i < 4; i++) {
initSetData(0,modelBean);
}
}else if (modelBean.getData().getAdvertBeans().size() == 2){
for (int i = 0; i < 4; i++) {
initSetData(i%2,modelBean);
}
}else if (modelBean.getData().getAdvertBeans().size() == 3){
for (int i = 0; i < 6; i++) {
initSetData(i%3,modelBean);
}
}else {
for (int i = 0; i < modelBean.getData().getAdvertBeans().size(); i++) {
initSetData(i,modelBean);
}
}
}
initFlashView(modelBean);
private void initSetData(int i, HomeBean modelBean) {
for (i = 0; i < modelBean.getData().getAdvertBeans().size(); i++) {
if (null!= modelBean.getData().getAdvertBeans().get(i) && null!= modelBean.getData().getAdvertBeans().get(i).getAdPicUrl()){
imgUrlList.add(modelBean.getData().getAdvertBeans().get(i).getAdPicUrl());
}else {
imgUrlList.add("");
}
}
}
private void initFlashView(HomeBean modelBean) {
mLists.clear();
if (imgUrlList.size()>0){
for (int i = 0; i < imgUrlList.size(); i++) {
ImageView iv = new ImageView(getActivity());
ViewGroup.LayoutParams lp = new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT);
iv.setLayoutParams(lp);
Picasso.with(getActivity()).load(imgUrlList.get(i)).error(R.mipmap.default_image).into(iv);
iv.setScaleType(ImageView.ScaleType.FIT_XY);
mLists.add(iv);
}
}
if (null == adapter){
adapter = new HomePagerAdapter(mLists, mItemClickListener);
viewPagerHome.setAdapter(adapter);
}else {
adapter.notifyDataSetChanged();
}
}
}
HomePagerAdapter.OnItemClickListener mItemClickListener = new HomePagerAdapter.OnItemClickListener() {
@Override
public void onItemClick(View view, int position) {
Intent intent = new Intent(getActivity(),AdPicHomeJumpActivity.class);
if (imgJumpUrlList.size()>0 && null!= imgJumpUrlList.get(position)){
intent.putExtra("jumpUrl",imgJumpUrlList.get(position));
}
getActivity().startActivity(intent);
}
};
到这里,我们可能会发现轮播不能跳转,那么,我们接下来要做的就是在onCreate()方法中接口调用后执行方法initView(),代码如下:
@ViewInject(R.id.viewpager_home)
ViewPager viewPagerHome;
private final int HOME_AD_RESULT = 1;
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
getHomeData();
initView();
}
private void initView() {
try {
viewPagerHome.setCurrentItem(50000);
}catch (Exception e){
e.printStackTrace();
}
mHandler.removeMessages(HOME_AD_RESULT);
mHandler.sendEmptyMessageDelayed(HOME_AD_RESULT, 3000);
}
private Handler mHandler = new Handler() {
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
switch (msg.what) {
case HOME_AD_RESULT:
viewPagerHome.setCurrentItem(viewPagerHome.getCurrentItem() + 1);
mHandler.removeMessages(HOME_AD_RESULT);
mHandler.sendEmptyMessageDelayed(HOME_AD_RESULT, 3000);
break;
default:
break;
}
}
};
到这里,我们的分析基本结束,仅记录供参考!
如有问题,欢迎留言!