ViewPager的IllegalStateException运行异常处理
来源:互联网 发布:智能电视软件市场 编辑:程序博客网 时间:2024/05/22 08:20
开发场景:1.在activity执行oncreate()生命周期时,初始化viewpager控件、viewpager的适配器adapter,adapter的填充数组list;
2. 当用户刷新数据的时候,先清空listview,并将新数据填充到list中,调用adapter的notifyDataSetChanged()方法,此时产生运行错误。
错误类型: Caused by: java.lang.IllegalStateException: The specified child already has a parent. You must call removeView() on the child's parent first.
代码如下:
MainActivity.java
package com.example.androidtest;import java.util.ArrayList;import java.util.List;import android.app.Activity;import android.os.Bundle;import android.support.v4.view.ViewPager;import android.view.LayoutInflater;import android.view.View;import android.widget.ImageView;public class MainActivity extends Activity {private ViewPager vp ;private VPAdapter vpAdapter;private List<View> views;@Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); vp = (ViewPager)findViewById(R.id.vp);views = new ArrayList<View>();vpAdapter = new VPAdapter(views);vp.setAdapter(vpAdapter);}public void doClick(View v){switch (v.getId()) {case R.id.add:views.clear();for (int i = 0; i < 3; i++) {ImageView iv = (ImageView)((View)LayoutInflater.from(this).inflate(R.layout.imageview, null)).findViewById(R.id.iv);iv.setImageResource(R.drawable.ic_launcher);views.add(iv);}vpAdapter.notifyDataSetChanged();break;case R.id.del:break;}}}
package com.example.androidtest;import java.util.ArrayList;import java.util.List;import android.support.v4.view.PagerAdapter;import android.view.View;import android.view.ViewGroup;public class VPAdapter extends PagerAdapter {private List<View> viewList;public VPAdapter(List<View> viewList){if(viewList!=null){this.viewList = viewList;}else{this.viewList = new ArrayList<View>();}}@Overridepublic int getCount() {// TODO Auto-generated method stubreturn viewList.size();}@Overridepublic boolean isViewFromObject(View arg0, Object arg1) {// TODO Auto-generated method stubreturn arg0==arg1;}@Overridepublic void destroyItem(ViewGroup container, int position, Object object) {container.removeView(viewList.get(position));}@Overridepublic Object instantiateItem(ViewGroup container, int position){//这里的判断是关键代码,首先我们要判断这个view的父容器是否为null;//如果为null,证明是第一次加入,直接添加即可,//如果不为null。此时需要先remove掉父容器,再将这个view添加到container中,否则就会产生IllegalStateException异常if(viewList.get(position).getParent()==null){container.addView(viewList.get(position), 0);}else{((ViewGroup)viewList.get(position).getParent()).removeView(viewList.get(position));container.addView(viewList.get(position));}return viewList.get(position);}}
0 0
- ViewPager的IllegalStateException运行异常处理
- IllegalStateException异常处理
- jfreechart Struts2 IllegalStateException 异常处理
- java.lang.IllegalStateException异常处理
- java.lang.IllegalStateException: Fragment already added异常的处理
- java.lang.IllegalStateException: Fragment already added ListFragment异常的处理
- java.lang.IllegalStateException: Fragment already added异常的处理
- Android java.lang.IllegalStateException: Fragment already added异常的处理
- java.lang.IllegalStateException: Fragment already added异常的处理
- java.lang.IllegalStateException: Fragment already added异常的处理
- viewpager异常处理
- 异常处理:Caused by: Java.lang.IllegalStateException
- IllegalStateException: getOutputStream() 异常的解决方法
- Android 中ViewPager+fragment报异常:IllegalStateException:Can't change tag of fragment的一种解决思路
- 当使用ViewPager滑动发生java.lang.IllegalStateException: The specified child already has a parent.异常时的解决方案
- 使用Spring实现异常统一处理【三】--java.lang.IllegalStateException: STREAM问题的解决
- IllegalStateException异常
- 《IllegalStateException异常》
- 详解qt路径-从 相对路径 说开来(从C++到Qt) .
- 二叉树的遍历(前序、中序、后序、层序),递归和非递归实现
- hadoop中的一些基本操作及wordcount的运行操作示范
- 网页设计必知:什么是CSS?它的能做些什么?
- mysql 多表合并查询
- ViewPager的IllegalStateException运行异常处理
- 总理如何破解中国最大民生难题?
- 将PrivateKey保存到本地
- Python绘图——matplotlib绘图库入门
- ACE_Proactor TCP(接收什么就打印什么)V1.3
- 无限后台任务
- java表(List)
- AutoCAD Mechanical 2010 激活
- 做游戏开发需要具备那些知识或技能?