这样写viewpager轮播页数超过2页就闪退,这是为什么?

qq_37754497 2019-08-11 12:13:23
public class FragmentOne extends Fragment implements Runnable { private ViewPager viewPager; private int[] gg = new int[]{R.mipmap.header_pic_ad1, R.mipmap.header_pic_ad2}; private List<ImageView> showPager = new ArrayList<ImageView>(); private ViewGroup dotViewGroup; private List<ImageView> dotView = new ArrayList<ImageView>(); private View view; private Thread t; 1 2 3 4 5 6 7 Override public void onAttach(Context context) { super.onAttach(context); } @Override public void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); 1 2 3 } @Override public void onActivityCreated(@Nullable Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); viewPager = (ViewPager) view.findViewById(R.id.show_view); dotViewGroup = (ViewGroup) view.findViewById(R.id.dot_layout); for (int i = 0; i < gg.length; i++) { ImageView v = new ImageView(getContext()); v.setScaleType(ImageView.ScaleType.CENTER_CROP); v.setImageResource(gg[i]); showPager.add(v); ImageView dot = new ImageView(getContext()); dot.setImageResource(R.drawable.dot2); dot.setMaxHeight(100); dot.setMaxWidth(100); LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(50, 50); layoutParams.leftMargin = 20; dot.setLayoutParams(layoutParams); dot.setEnabled(false); dotViewGroup.addView(dot); dotView.add(dot); } viewPager.setAdapter(new PagerAdapter() { @Override public int getCount() { return gg.length; } @Override public boolean isViewFromObject(@NonNull View view, @NonNull Object object) { return view == object; } @NonNull @Override public Object instantiateItem(@NonNull ViewGroup container, int position) { ImageView imageView = showPager.get(position); container.addView(imageView); return imageView; } @Override public void destroyItem(@NonNull ViewGroup container, int position, @NonNull Object object) { container.removeView((View) object); } }); t = new Thread(this); t.start(); viewPager.setCurrentItem(0); setDotView(0); viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() { @Override public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { } @Override public void onPageSelected(int position) { setDotView(position); } @Override public void onPageScrollStateChanged(int state) { } }); } //创建视图 @Nullable @Override public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { view = inflater.inflate(R.layout.fragment_one, container, false); 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 return view; } @Override public void onStart() { super.onStart(); } @Override public void onPause() { super.onPause(); } @Override public void onStop() { super.onStop(); } @Override public void onDestroyView() { super.onDestroyView(); } @Override public void onDestroy() { super.onDestroy(); } private void setDotView(int position) { for (int i = 0; i < dotView.size(); i++) { dotView.get(i).setImageResource(position == i ? R.drawable.dot : R.drawable.dot2); } } @Override public void run() { int item = 0; while (item < gg.length) { viewPager.setCurrentItem(item); setDotView(item); try { Thread.sleep(3000); } catch (InterruptedException e) { e.printStackTrace(); } if (item == (gg.length - 1)) item = 0; else item++; } } 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54
...全文
387 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
王能 2019-08-21
  • 打赏
  • 举报
回复
没看代码,收回上面说的,你的死循环是在Thread中的,内存泄漏、代码逻辑什么都就不多吐槽了。 首先子线程是不予许更新ui的,所以你的代码是必崩溃,具体为什么2个条目不会崩溃还是麻烦看一下日志。 崩溃第一条看日志!看日志!看日志! 具体日志怎么看见博客:https://blog.csdn.net/weimingjue/article/details/87921494
qq_37754497 2019-08-20
  • 打赏
  • 举报
回复
引用 5 楼 王能的回复:
主线程就一个,你死循环了界面当然不动了。 自己查一下:hander1秒发送一次就行了
那为什么只有两页的时候就不闪退
静默加载 应用层 2019-08-19
  • 打赏
  • 举报
回复
这个代码贴的看起来真清楚。
王能 2019-08-19
  • 打赏
  • 举报
回复
主线程就一个,你死循环了界面当然不动了。 自己查一下:hander1秒发送一次就行了
m-oj 应用层 2019-08-15
  • 打赏
  • 举报
回复
引用 3 楼 qq_37754497 的回复:
[quote=引用 2 楼 m-oj的回复:]你的run方法死循环了吧,检查一下
就是让它死循环,然后一直改变itme就一直轮播,我是这样想的[/quote] 那就有问题了,更新UI只能在主线程
qq_37754497 2019-08-15
  • 打赏
  • 举报
回复
引用 2 楼 m-oj的回复:
你的run方法死循环了吧,检查一下
就是让它死循环,然后一直改变itme就一直轮播,我是这样想的
m-oj 应用层 2019-08-12
  • 打赏
  • 举报
回复
你的run方法死循环了吧,检查一下
zhang106209 2019-08-12
  • 打赏
  • 举报
回复
报的什么错,把错误贴出来

80,350

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧