前言
简单记录一下ViewPager时出现的问题。记录于此,方便自己查阅和回顾。
正文
下面是使用ViewPager一个无限循环时随意切换item时出行ARN闪退。
"main" prio=5 tid=1 Runnable | group="main" sCount=0 dsCount=0 flags=0 obj=0x744dd450 self=0x7a65814c00 | sysTid=12452 nice=-10 cgrp=default sched=0/0 handle=0x7aeb56a548 | state=R schedstat=( 9368191955 130265433 1059 ) utm=920 stm=16 core=2 HZ=100 | stack=0x7fd4467000-0x7fd4469000 stackSize=8MB | held mutexes= "mutator lock"(shared held) at androidx.viewpager.widget.ViewPager.populate(ViewPager.java:1205) at androidx.viewpager.widget.ViewPager.setCurrentItemInternal(ViewPager.java:669) at androidx.viewpager.widget.ViewPager.setCurrentItemInternal(ViewPager.java:631) at androidx.viewpager.widget.ViewPager.setCurrentItem(ViewPager.java:612) at com.biumall.image.ImageActivity.onItemClick(ImageActivity.java:598) at android.widget.AdapterView.performItemClick(AdapterView.java:318) at android.widget.AbsListView.performItemClick(AbsListView.java:1159) at android.widget.AbsListView$PerformClick.run(AbsListView.java:3136) at android.widget.AbsListView$3.run(AbsListView.java:4052) at android.os.Handler.handleCallback(Handler.java:873) at android.os.Handler.dispatchMessage(Handler.java:99) at android.os.Looper.loop(Looper.java:193) at android.app.ActivityThread.main(ActivityThread.java:6691) at java.lang.reflect.Method.invoke(Native method) at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:982)
可以看出上面问题是
at com.biumall.image.ImageActivity.onItemClick(ImageActivity.java:598)
也就是onItemClick()时出行问题的,而这里我就调用了切换Item
@Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { Log.d(TAG, "onItemClick position : " + position); mViewPager.setCurrentItem(position); }
原因
出现这个问题是ViewPager做了无限循环+GridView或RecyclerView放一起了,在同一个界面上用户可以随便点击Item导致的。
之前记录过《》这里有使用无限循环的。
无限循环时让用户看起来切换很流程,其实也是假的无限循环。
解决方法
上面也说了原因,解决方式如下:
ViewPager不做无限循环,可以让用户随便切换。
ViewPager做无限循环,但界面不让用户随便点击Item切换。
参考文章
历史上的今天
- 《ViewPager禁止切换page时动画》
- 《ViewPager 切换是出行ANR记录》
- 《盘58网盘》
- 《搜盘网》
- 《80网盘》
- 《V盘搜》
- 《奈斯搜索》
- 《云盘资源共享站》
- 《兄弟盘》
© 版权声明