Android 获取View中的组件

可以把这个view强转成ViewGroup对象,再通过getChildAt(0),getChildAt(1)

获取之后AddView可能会报错:IllegalStateException: The specified child already has a parent问题解决办法
最近遇到一个很让人头疼的问题,使用viewpager动态添加页面或者删除页面时出现了问题(java.lang.IllegalStateException: The specified child already has a parent. You must call removeView() on the child‘s parent first),在stackoverflow上找到了解决办法。(http://stackoverflow.com/questions/22936886/java-lang-illegalstateexception-while-using-viewpager-in-android)
原文是:
the problem is that in your adapters method instantiateItem
you call container.addView(v);
but every View can have only one parent,
so it can be added only one time to a container via addView(...).
When you open the popup the first time, everything works, because v
doesn‘t have a parent that time. But when you open your popupwinow the second time,
it adds the view again to the container. That cerates the error.
Try to destroy the view if you close the popup view or remove all children views from it with
container.removeAllViews()
解决办法是在instantiateItem中使用如下方式:
ViewGroup parent = (ViewGroup) v.getParent();
 if (parent != null) {
parent.removeAllViews();
 }
container.addView(v);

中间很多次尝试已经接近答案,但是习惯性的去把v.getParent()强制转化为view,view没有removeView()方法,以至于放弃了这种方法,以后要多思考,想到的解决办法如果完全不是自己想要的结果,一定要再检查一遍,很有可能是某个小地方没注意。奋斗
时间: 2024-10-14 05:02:00

Android 获取View中的组件的相关文章

android 获取设备中已启动的服务并判断某一服务是否启动

我们常常在开发的时候,通过获取系统已启动的服务来判断该服务器是否还需要再启动. 而本文将介绍android设备中已启动的服务,并判断某一服务是启动 1.根据ACTIVITY_SERVICE获取系统服务 activityManager = (ActivityManager) getSystemService(ACTIVITY_SERVICE); 2.获取系统中正在运行的服务 runningList = activityManager.getRunningServices(30);//代表我们希望返

android获取view宽高的几种方法

在onCreate方法中我们通过mView.getWidth()和mView.getHeight()获取到的view的宽高都是0,那么下面几种方法就可以在onCreate方法中获取到view的宽高. 1. int w = View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED); int h = View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED

Android 获取View宽度

/***************************************************************************** * Android 获取View宽度 * 说明: * 在View默认的构造函数里无法获取到View的宽高,需要采用另外的方式获取. * * 2016-6-15 深圳 南山平山村 曽剑锋 ****************************************************************************/

android 获取view在屏幕中的位置

使用view中的getLocationOnScreen方法,即可: [java] view plaincopy final int[] locations = new int[2]; Button btn = (Button) findViewById(R.id.btn);<span style="font-family: Arial, Helvetica, sans-serif;">     </span> [java] view plaincopy btn.

Android 获取SDCard中某个目录下图片

本文介绍Android开发中如何获取SDCard中某目录下的所有图片并显示出来,下面的我们提供的这个函数是通用的,只要提供路径就可以查询出该目录下所有图片的路径信息,并保存到一个List<String>中. 1.获取SDCard中某个目录下图片路径集合 public List<String> getPictures(final String strPath) { List<String> list = new ArrayList<String>(); Fil

Android 获取View绘制前的高度

在Android开发过程中,我们可能需要获取View绘制前的高度或者宽度,一种的可能情形是我们初始化的时候让某个View是Visible = Gone的,当我们触发某个事件的时候需要它显示并且希望有一些动画效果.这时候我们就要获取这个View显示前即绘制前的宽度或者高度.原理很简单,我们知道,View的绘制过程发生之前,会先执行onMeasure方法.那么我们就可以利用反射来或者我们需要的值.下面给出获取高度的代码,宽度同理. private int getTargetHeight(View v

关于Android自定义View中的onTouchEvent(MotionEvent event)事件监听

今天做一个自定义ViewGroup,通过addView动态添加子控件,为了省事,直接在父控件里重写public boolean onTouchEvent(MotionEvent event){}方法来监听当前触碰是哪个按钮,遇到点问题,所以写下来. 首先是点击效果只有 MotionEvent.ACTION_DOWN,这个把返回改为return true;就行了 然后是 getX()和getRawX()的区别,这个这篇博文有写到 http://www.cnblogs.com/foura/artic

android——获取view的宽高

在activity生命周期方法:onCreate(),onStart(),onResume()中调用View.getWidth()和View.getHeight()方法获取View的高度是不可行的,因为此时布局没有加载是不可见状态. 还有当view的可见状态为:GONE,时获取的宽高也是0: 2. 解决办法: (1)直接测量: private void first() { int width = View.MeasureSpec.makeMeasureSpec(0, View.MeasureSp

Android获取View的高宽的方式

一.MeasureSpec(测量方法): LinearLayout newsTopLayout = (LinearLayout) viewHashMapObj.get("top"); int w = View.MeasureSpec.makeMeasureSpec(0,View.MeasureSpec.UNSPECIFIED); int h = View.MeasureSpec.makeMeasureSpec(0,View.MeasureSpec.UNSPECIFIED); newsT