ViewGroup 添加移除View 常用几种方式的区别

简单来说ViewGroup 维护一个子类的View 数组

  1. attachViewToParent 和 DetachViewToparent 是直接操作这个数组,不会去调用requestlayout 去重绘。
  2. removeView 和 addView 会主动调用requestlayout 和 invalidate 去强制重绘。
  3. removeViewInLayout 和 addViewInLayout 不会去调用 requestLayout 和 invalidate 所以可以有效的在onlayout方法中调用。

2 和 3 都会通过 addViewInner 和 removeViewInternal 去操作
第一种方式 通过 addInArray 和 removeFromArray 直接去 修改 子view的数组

如果是通过 addviewinner 和 removeViewInternal 会促发 layouttransition 做动画效果 还会 触发一些回调 并调用 子view的attachwindow 和 detachwindow 然后 也会进行 addInArray 和 removeFromArray 去修改数组。

所以如果 只是单纯的数据变化 使用 attachViewtoParent 和 detachViewtoParent 不会对 子view 做变化。只是简单的移出 viewGroup的显示 attach 还是最好 配合 detach使用 因为 添加一个子view应该还需要做下子viewAttach操作 具体 相关代码 可能在attachInfo 之中找到关

然后这个子view数组 对viewgroup显示有什么影响呢 ?
viewgroup dispatchdraw 会使用 这个来对每个子view分派draw事件

所以动态添加view时选择合适的方式进行添加

ArrayAdapter<String> 是一个用于将字符串数组或列表中的数据绑定到 ListView 或 Spinner 等控件上的适配器类,常用的设置方法有以下几种: 1. 构造函数:ArrayAdapter<String> adapter = new ArrayAdapter<>(context, layoutResourceId, data); 2. setDropDownViewResource(int resource):设置 Spinner 下拉列表的样式,resource 可以是一个布局文件或系统自带的样式。 3. setNotifyOnChange(boolean notifyOnChange):设置当数据源改变时是否自动通知适配器更新视图,默认为 true。 4. add(String object):向适配器添加一个字符串数据。 5. addAll(Collection<? extends String> collection):向适配器添加一个字符串列表。 6. remove(String object):从适配器中移除一个字符串数据。 7. clear():清空适配器中的所有数据。 8. getCount():获取适配器中数据项的数量。 9. getItem(int position):获取适配器中指定位置的数据项。 10. getItemId(int position):获取适配器中指定位置的数据项的 ID。 11. getView(int position, View convertView, ViewGroup parent):获取适配器中指定位置的数据项对应的视图,用于显示在 ListView 或 Spinner 上。 12. setDropDownViewResource(int resource):设置 Spinner 下拉列表的样式,resource 可以是一个布局文件或系统自带的样式。 13. setDropDownViewResource(int resource):设置 Spinner 下拉列表的样式,resource 可以是一个布局文件或系统自带的样式。 14. setDropDownViewResource(int resource):设置 Spinner 下拉列表的样式,resource 可以是一个布局文件或系统自带的样式。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值