Android 空的ViewPager与PagerTabStrip一起崩溃
将Android 空的ViewPager与PagerTabStrip一起崩溃,android,android-widget,Android,Android Widget,将ViewPager与PagerTabStrip一起使用时: <?xml version="1.0" encoding="utf-8"?> <android.support.v4.view.ViewPager xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/pager" android:layout_width="fill_parent" an
ViewPager
与PagerTabStrip
一起使用时:
<?xml version="1.0" encoding="utf-8"?>
<android.support.v4.view.ViewPager
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/pager"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<android.support.v4.view.PagerTabStrip
android:id="@+id/pager_tab_strip"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="top"
android:paddingTop="4dp"
android:paddingBottom="4dp"
/>
</android.support.v4.view.ViewPager>
触摸/滚动选项卡条时应用程序崩溃:
java.lang.IndexOutOfBoundsException: Invalid index 0, size is 0
at java.util.ArrayList.throwIndexOutOfBoundsException(ArrayList.java:251)
at java.util.ArrayList.get(ArrayList.java:304)
at android.support.v4.view.ViewPager.performDrag(ViewPager.java:1990)
我想可能是原因
“我的视图”设置是否存在错误或其他问题?在不进行任何检查的情况下访问阵列中的项目(当没有页面时):
这导致它崩溃 这个错误仍然没有修复,因为我遇到了同样的问题。 问题在于android ViewPager类中的performDrag(float x)方法中有两行代码: 如果mItems Arraylist是否为空,则根本不进行检查。 对于Android团队来说,这应该不难解决 然而,我想出了一个快速而肮脏的解决方案,我不建议使用。 只需创建您自己的类扩展ViewPager并重写该方法,该方法将产生崩溃并用try,catch块将其包围:
public class CustomViewPager extends ViewPager {
public CustomViewPager(Context context) {
super(context);
}
public CustomViewPager(Context context, AttributeSet attrs) {
super(context, attrs);
}
@Override
public boolean onInterceptTouchEvent(MotionEvent ev) {
boolean event = false;
try {
event = super.onInterceptTouchEvent(ev);
} catch (Exception e) {
Log.e(MainActivity.TAG, "ERROR: ViewPagerAdapter was empty");
}
return event;
}
}
使用try,catch块作为程序逻辑是不好的做法,但是在android团队修复这个bug之前,这是唯一对我有效的解决方案
编辑:
不要忘记在XML中引用自定义的ViewPager:
<com.package.CustomViewPager
android:id="@+id/viewPager_fragment_container"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
<android.support.v4.view.PagerTabStrip
android:layout_width="match_parent"
android:layout_height="wrap_content" />
</com.package.CustomViewPager>
只是猜测-尝试在getCount()中返回1,在getItem()中返回有效片段。顺便说一句,PagerTabStrip的宽度应该是fill\u parents你能解决这个问题吗?@DeRagan这个错误在支持库中,所以谷歌开发者需要解决它。它很容易只捕获索引自动边界异常
。或者在调用超级之前检查大小,根本不使用异常
final ItemInfo firstItem = mItems.get(0);
final ItemInfo lastItem = mItems.get(mItems.size() - 1);
public class CustomViewPager extends ViewPager {
public CustomViewPager(Context context) {
super(context);
}
public CustomViewPager(Context context, AttributeSet attrs) {
super(context, attrs);
}
@Override
public boolean onInterceptTouchEvent(MotionEvent ev) {
boolean event = false;
try {
event = super.onInterceptTouchEvent(ev);
} catch (Exception e) {
Log.e(MainActivity.TAG, "ERROR: ViewPagerAdapter was empty");
}
return event;
}
}
<com.package.CustomViewPager
android:id="@+id/viewPager_fragment_container"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
<android.support.v4.view.PagerTabStrip
android:layout_width="match_parent"
android:layout_height="wrap_content" />
</com.package.CustomViewPager>