android设置错误页面,Android ViewPager设置当前项目/页面时抛出IndexOutOfBounds异常

我有一个ViewPager有三个项目.我试图设置ViewPager查看最右边的页面(这将是第二个元素).这是返回IndexOutOfBounds异常,虽然我知道索引应该在边界.这是确切的堆栈:

02-22 12:22:50.256: E/AndroidRuntime(384): FATAL EXCEPTION: main

02-22 12:22:50.256: E/AndroidRuntime(384): java.lang.IndexOutOfBoundsException: index=1 count=0

02-22 12:22:50.256: E/AndroidRuntime(384): at android.view.ViewGroup.addInArray(ViewGroup.java:2050)

02-22 12:22:50.256: E/AndroidRuntime(384): at android.view.ViewGroup.addViewInner(ViewGroup.java:1994)

02-22 12:22:50.256: E/AndroidRuntime(384): at android.view.ViewGroup.addViewInLayout(ViewGroup.java:1958)

02-22 12:22:50.256: E/AndroidRuntime(384): at android.view.ViewGroup.addViewInLayout(ViewGroup.java:1939)

02-22 12:22:50.256: E/AndroidRuntime(384): at android.support.v4.view.ViewPager.addView(ViewPager.java:917)

02-22 12:22:50.256: E/AndroidRuntime(384): at android.view.ViewGroup.addView(ViewGroup.java:1828)

02-22 12:22:50.256: E/AndroidRuntime(384): at us.tagverse.pagertest.MasterActivity$PAdapter.instantiateItem(MasterActivity.java:518)

02-22 12:22:50.256: E/AndroidRuntime(384): at android.support.v4.view.PagerAdapter.instantiateItem(PagerAdapter.java:110)

02-22 12:22:50.256: E/AndroidRuntime(384): at android.support.v4.view.ViewPager.addNewItem(ViewPager.java:649)

02-22 12:22:50.256: E/AndroidRuntime(384): at android.support.v4.view.ViewPager.populate(ViewPager.java:783)

02-22 12:22:50.256: E/AndroidRuntime(384): at android.support.v4.view.ViewPager.onMeasure(ViewPager.java:1016)

02-22 12:22:50.256: E/AndroidRuntime(384): at android.view.View.measure(View.java:8313)

02-22 12:22:50.256: E/AndroidRuntime(384): at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:3138)

02-22 12:22:50.256: E/AndroidRuntime(384): at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1017)

02-22 12:22:50.256: E/AndroidRuntime(384): at android.widget.LinearLayout.measureVertical(LinearLayout.java:386)

02-22 12:22:50.256: E/AndroidRuntime(384): at android.widget.LinearLayout.onMeasure(LinearLayout.java:309)

02-22 12:22:50.256: E/AndroidRuntime(384): at android.view.View.measure(View.java:8313)

02-22 12:22:50.256: E/AndroidRuntime(384): at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:3138)

02-22 12:22:50.256: E/AndroidRuntime(384): at android.widget.FrameLayout.onMeasure(FrameLayout.java:250)

02-22 12:22:50.256: E/AndroidRuntime(384): at android.view.View.measure(View.java:8313)

02-22 12:22:50.256: E/AndroidRuntime(384): at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:3138)

02-22 12:22:50.256: E/AndroidRuntime(384): at android.widget.FrameLayout.onMeasure(FrameLayout.java:250)

02-22 12:22:50.256: E/AndroidRuntime(384): at android.view.View.measure(View.java:8313)

02-22 12:22:50.256: E/AndroidRuntime(384): at android.view.ViewRoot.performTraversals(ViewRoot.java:839)

02-22 12:22:50.256: E/AndroidRuntime(384): at android.view.ViewRoot.handleMessage(ViewRoot.java:1859)

02-22 12:22:50.256: E/AndroidRuntime(384): at android.os.Handler.dispatchMessage(Handler.java:99)

02-22 12:22:50.256: E/AndroidRuntime(384): at android.os.Looper.loop(Looper.java:123)

02-22 12:22:50.256: E/AndroidRuntime(384): at android.app.ActivityThread.main(ActivityThread.java:3683)

02-22 12:22:50.256: E/AndroidRuntime(384): at java.lang.reflect.Method.invokeNative(Native Method)

02-22 12:22:50.256: E/AndroidRuntime(384): at java.lang.reflect.Method.invoke(Method.java:507)

02-22 12:22:50.256: E/AndroidRuntime(384): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)

02-22 12:22:50.256: E/AndroidRuntime(384): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)

02-22 12:22:50.256: E/AndroidRuntime(384): at dalvik.system.NativeStart.main(Native Method)

注意原因是java.lang.IndexOutOfBoundsException:index = 1 count = 0.这意味着页/项的计数是0,我要求的索引是1.这两个都不是真的.这是我打电话给我的ViewPager和请求给定的页面:

ViewPager pager = (ViewPager) findViewById(R.id.ma_viewcontainer);

PAdapter adapter = new PAdapter();

pager.setAdapter(adapter);

pager.setCurrentItem(2);

请注意,此调用不会发生任何错误,并将当前项目正确设置为中间项目(索引1):

ViewPager pager = (ViewPager) findViewById(R.id.ma_viewcontainer);

PAdapter adapter = new PAdapter();

pager.setAdapter(adapter);

pager.setCurrentItem(1);

我在视图寻呼机中有3个项目的数量.这是我的完整的PAdapter类,它扩展了PagerAdapter类:

private class PAdapter extends PagerAdapter implements TitleProvider {

private int COUNT = 3;

private static final int SETTINGS_ACTIVITY = 0;

private static final int MAIN_ACTIVITY = 1;

private static final int FRIEND_LIST_ACTIVITY = 2;

@Override

public int getCount() {

return COUNT;

}

@Override

public Object instantiateItem(View collection, int position) {

LinearLayout layout = new LinearLayout(getApplicationContext());

LayoutInflater inflater = (LayoutInflater) getApplicationContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);

switch(position) {

case MAIN_ACTIVITY :

layout = (LinearLayout) inflater.inflate(R.layout.main, null, false);

initMainLayout(layout);

break;

case SETTINGS_ACTIVITY :

layout = (LinearLayout) inflater.inflate(R.layout.settings, null, false);

initSettingsLayout(layout);

break;

case FRIEND_LIST_ACTIVITY :

layout = (LinearLayout) inflater.inflate(R.layout.friend_list, null, false);

initFriendListLayout(layout);

break;

}

((ViewPager)collection).addView(layout, position);

return layout;

}

@Override

public void destroyItem(View collection, int position, Object view) {

((ViewPager)collection).removeView((LinearLayout)view);

}

@Override

public boolean isViewFromObject(View v, Object o) {

return v == (LinearLayout)o;

}

@Override

public void finishUpdate(View arg0) {

//no need

}

@Override

public void restoreState(Parcelable arg0, ClassLoader arg1) {

//no need

}

@Override

public Parcelable saveState() {

return null;

}

@Override

public void startUpdate(View arg0) {

//no need

}

@Override

public String getTitle(int position) {

Resources res = getApplicationContext().getResources();

switch(position) {

case MAIN_ACTIVITY :

return res.getString(R.string.app_name);

case SETTINGS_ACTIVITY :

return res.getString(R.string.settings);

case FRIEND_LIST_ACTIVITY :

return res.getString(R.string.friend_list);

default :

return null;

}

}

}

行((ViewPager)集合).addView(layout,position);导致崩溃.

你可以看到,三个项目.使用参数为0或1的setCurrentItem()可以正常工作,但是2会导致这个奇怪的错误.我已经用尽了想法来解决它…不幸的是,ViewPager驻留在Android的一些未知的水域似乎.如果有人对如何解决这个问题有一些了解,那将是非常感激的.谢谢!

编辑:根据Shereef的建议,我尝试通过collection.getChildCount()记录子计数,得到以下结果:

02-22 15:20:42.274: E/children count(645): count: 0

02-22 15:20:42.454: E/children count(645): count: 1

02-22 15:20:42.594: E/children count(645): count: 2

这很有趣.这告诉我的是,它创建一个空的PagerAdapter,并一次添加一个.对于三个可见视图(中心,左和右),instantiateItem()被调用3次.所以我在instantiateItem()方法中添加了这个代码块:

if(((ViewPager)collection).getChildCount() == 2) {

((ViewPager)collection).setCurrentItem(2);

}

所以只有计数确定为2,它会将页面设置为2(这是一个很难解决的问题,但值得一试).我得到了一个类似的错误堆栈,首先指出:((ViewPager)集合).setCurrentItem(2);然后((ViewPager)集合).addView(layout,position);.

希望这有助于提供一些洞察力.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/557051.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【POI】读取Excel表中的数据

确认需要读取的表格的内容: 导入依赖&#xff1a; <dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml</artifactId><version>4.1.1</version></dependency>package com.example;import org.apache.poi.s…

w15php系列之基础类型

一、计算100之内的偶数之和 实现思路 所有的偶数除2都为0 代码实现 <?php # 记录100以内的偶数和 $number1; $num0; while($number<100){if($number%20){ $num$number;}$number1; } echo $num; ?>输出的结果 二、计算100之内的奇数之和 实现思路 所有的奇数除…

android 从本地服务器下载文件,Retrofit2-如何从服务器下载文件

在这篇博客中&#xff0c;将会讲述使用Retrofit十分需要的一个功能&#xff1a;怎么去下载文件&#xff0c;下面会展示一些下载文件需要写的代码片段&#xff0c;从小的 png 图片到大的 zip文件。

Java操作Excel中HSSFCell.CELL_TYPE_STRING、BOOLEAN、NUMERIC无定义解决方法

错误原因&#xff1a;jar包版本更新&#xff0c;官方改动&#xff1b; 解决方法&#xff1a; 导入CellType包import org.apache.poi.ss.usermodel.CellType 使用CellType.STRING代替HSSFCell.CELL_TYPE_STRING 其他同理。 新版&#xff1a; if(cellnull||cell.equals(null)…

android x86_64 服务器运行,魔趣 android10 编译x86-64 运行模拟器

cd 代码目录. build/envsetup.shlunch出现1. aosp_arm-eng2. aosp_arm64-eng3. aosp_car_arm-userdebug4. aosp_car_arm64-userdebug5. aosp_car_x86-userdebug6. aosp_car_x86_64-userdebug7. aosp_x86-eng8. aosp_x86_64-eng9. car_x86_64-userdebug10. m_e_arm-userdebug11.…

RoundingMode 几个参数详解

第一版 java.math().RoundingMode里面有几个参数搞得我有点晕&#xff0c;现以个人理解对其一一进行总结&#xff1a; RoundingMode.CEILING&#xff1a;取右边最近的整数 RoundingMode.DOWN&#xff1a;去掉小数部分取整&#xff0c;也就是正数取左边&#xff0c;负数取右边…

android资源透明背景,@谷歌android帝 这是你想要的,全局透明背景教程,两种方法...

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼首先大家提取原生态没有任何修改过的framework-res.apk&#xff0c;反编译&#xff0c;(这里特别交代一下&#xff0c;大家要看仔细了&#xff0c;全局背景化透明化的修改是有两种修改的方法&#xff0c;大家可以根据自己喜好来修改…

关于异常nested exception is java.lang.NoClassDefFoundError: org/apache/commons/fileupload/FileItemFactor

简单看了一下发现原来是没有commons-fileupload包导致的&#xff0c;然后就在pom里加入了依赖。 <dependency><groupId>commons-fileupload</groupId><artifactId>commons-fileupload</artifactId><version>1.3.1</version></dep…

android 魅族系统升级,魅族Flyme6底层安卓系统升级到了Android7.0/7.1,为何时间这么久?...

国产手机系统中&#xff0c;小米的MIUI和魅族的flyme有着众多的用户。相比魅族的系统来说小米MIUI在更新速度上更胜一筹&#xff0c;开玩笑的讲&#xff0c;小米系统已经升级到了MIUI9而魅族仅仅才Flyme6(当然&#xff0c;这更多的是调侃)。不过也从侧面看出&#xff0c;魅族在…

SVN 回滚(撤回)提交的代码

一、 TortoiseSVN -> Show log 二、 注意&#xff1a;步骤二只是让你本地的代码回滚&#xff08;撤回&#xff09;到你未提交前的一个版本&#xff0c;并不会更新到SVN服务器上&#xff0c;也就是说你的同事依然能更新到你错误提交的代码。 右键点击你想撤回的提交 -&g…

Navicat工具获取操作数据库和表的SQL语句

工具 Navicat Premium 15MySQL服务器技术 SQL语句MySQL 在使用Navicat Premium 15客户端时&#xff0c;对数据库和表进行操作&#xff0c;会产生SQL语句。有时我们不记得SQL语句如何编写&#xff0c;可以直接从工具中获取SQL语句。下面利用实例说明获取SQL语句的几种方法&…

html自动适应屏幕分辨率,css如何自适应屏幕大小?

css如何自适应屏幕大小&#xff1f;下面本篇文章给大家介绍一下使用CSS实现屏幕大小自适应的方法。有一定的参考价值&#xff0c;有需要的朋友可以参考一下&#xff0c;希望对大家有所帮助。css如何自适应屏幕大小&#xff1f;要想实现css屏幕大小自适应&#xff0c;首先得引入…

鸿蒙之始有几个老婆,先天五太

本词条缺少概述图&#xff0c;补充相关内容使词条更完整&#xff0c;还能快速升级&#xff0c;赶紧来编辑吧&#xff01;先天五太最早见于东汉今文经谶纬神学《周易乾凿度》&#xff0c;后见于西晋《列子》&#xff0c;被定为道家哲学中代表无极过渡到天地诞生前的五个阶段。分…

Navicat Premium 12连接SQLServer[ODBC驱动程序管理器]未发现数据源名称并且未指定默认驱动程序

报错截图&#xff1a; 解决办法&#xff1a; 右击安装图标&#xff0c;点击“打开文件所在位置” 找到下图程序&#xff0c;按自己情况安装 全都默认“下一步”就行。 安装完成后&#xff0c;关闭程序重新打开就可以了。

html 冒泡事件拦截,Js 冒泡事件阻止

一. 事件目标现在&#xff0c;事件处理程序中的变量event保存着事件对象。而 event.target 属性保存着产生事件的目标元素。这个属性是 DOM API 中规定的&#xff0c;但是没有被所有浏览器实现 。jQuery对这个事件对象进行了必要的扩大&#xff0c;从而在任何浏览器中都能够使用…

Springboot的异步、定时、邮件任务

一、异步任务 ​ 1、编写一个类AsyncService ​ 异步处理还是非常常用的&#xff0c;比如我们在网站上发送邮件&#xff0c;后台会去发送邮件&#xff0c;此时前台会造成响应不动&#xff0c;直到邮件发送完毕&#xff0c;响应才会成功&#xff0c;所以我们一般会采用多线程的…

raml2html 安装,Raml实践

Raml实践简介&#xff1a;RAML的全称是RESTful API Modeling Language&#xff0c;这是一种用来描述基于Restful架构的API(设计API)的语言。它的语法规范是基于YAML的新规范&#xff0c;因此机器与人类都能够轻易地理解其中的内容。一、工具安装一、API Workbench(客户端工具-推…

Spring框架中的单例Bean是线程安全的吗?

首先直接给出答案&#xff1a;不是线程安全的 一、分析问题 证明不是线程安全的案例如下&#xff1a; public class Student {private String stuName;public String report(String uname){stuName "大家好&#xff0c;我叫&#xff1a;"uname;try {Thread.sleep…

三诺+n20g+微型计算机,原来是他?揭秘三诺永恒系列开山鼻祖

提起三诺&#xff0c;我们的脑海中常常会浮现出几个关键词&#xff0c;“高性价比”、 “独立功放”、“摩机大赛”等等&#xff0c;摩机大赛让我们对三诺永恒系列2.0音箱有了全新的认识&#xff0c;凭借出色的音质表现&#xff0c;永恒系列广受专业编辑和用户的好评&#xff0…

Spring 中的bean 是线程安全的吗?

结论&#xff1a;不是线程安全的 Spring容器中的Bean是否线程安全&#xff0c;容器本身并没有提供Bean的线程安全策略&#xff0c;因此可以说Spring容器中的Bean本身不具备线程安全的特性&#xff0c;但是具体还是要结合具体scope的Bean去研究。 Spring 的 bean 作用域&#…