前言

简单记录一下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的简单使用》这里有使用无限循环的。

无限循环时让用户看起来切换很流程,其实也是假的无限循环。

解决方法

上面也说了原因,解决方式如下:

  1. ViewPager不做无限循环,可以让用户随便切换。

  2. ViewPager做无限循环,但界面不让用户随便点击Item切换。

参考文章

相关文章

暂无评论

none
暂无评论...