您的位置:首页 > 其它

viewpager setCurrentItem 过多出现卡顿 ANR 线程阻塞 页面无响应

2016-09-10 10:52 1256 查看
本想让viewpager 默认显示在中间,实现无限轮播,可是,页面会卡住

原因是,viewpager setCurrentItem 设置后,是一页一页滑动到指定位置的,如果设置过多,就会卡死,

解决方法:不要设置太多就好,设置个几十就好

@UiThread
void reflashSlideBannerData(String result) {
if (result != null) {
try {
String list = new JSONObject(result).getString("list");
JSONArray imgs = null;

try {
imgs = new JSONArray(list);
} catch (Exception e) {
Log.e("轮播图片只有一张,出现json转化失败");
return;
}

slideImgsUrl = new String[imgs.length()];
slideImgsHref = new String[imgs.length()];
slideAdvertiseId = new int[imgs.length()];

listImg = new ArrayList<String>();

for (int i = 0; i < imgs.length(); i++) {
JSONObject json = new JSONObject(imgs.get(i).toString());
slideImgsUrl[i] = json.getString("Content");
slideImgsHref[i] = json.getString("LinkUrl");
slideAdvertiseId[i] = json.getInt("AdvertiseID");
listImg.add(slideImgsUrl[i]);
}

slideImageAdapter = new ImageSlideBannerAdapter(LayoutInflater.from(this), this);
myPager.setAdapter(slideImageAdapter);

//设置跳跃幅度过大 ANR出现 设置为40就好
//int listImg_size = (listImg.size() != 0)? (Integer.MAX_VALUE / 2) - (Integer.MAX_VALUE / 2 % listImg.size()) : 0;

myPager.setCurrentItem(40);

slideImageAdapter.notifyDataSetChanged();

new Thread(new Runnable() {

@Override
public void run() {
myPager.setInterval(2000); /// 设置滚动时间间隔
myPager.setDirection(AutoScrollViewPager.RIGHT); // 设置滚动方向
myPager.setCycle(true);
myPager.setAutoScrollDurationFactor(8);
myPager.setStopScrollWhenTouch(true);
myPager.setBorderAnimation(true);
myPager.startAutoScroll();
}
}).start();

setOvalLayout(ovalLayout, R.layout.correcting3_pggmall_home_ad_bottom_item, R.id.ad_item_v,
R.drawable.dot_focused, R.drawable.dot_normal, listImg);

} catch (Exception e) {
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: