当前位置: 首页 > news >正文

做个企业网站 优帮云江苏建设官方网站

做个企业网站 优帮云,江苏建设官方网站,上海营销型网站开发,网站建设续约合同今天出去面试#xff0c;被面试官问到一个问题#xff0c;说是如果使用 LayoutInflate.inflate(int resource, ViewGroup root, boolean attachToRoot);这个方法与AbsListView的实现类结合使用的话#xff0c;会出现什么问题#xff0c;先看简单的使用过程#xff1a; Ove…今天出去面试被面试官问到一个问题说是如果使用 LayoutInflate.inflate(int resource, ViewGroup root, boolean attachToRoot);这个方法与AbsListView的实现类结合使用的话会出现什么问题先看简单的使用过程 Overridepublic View getView(int position, View convertView, ViewGroup parent) {View view inflater.inflate(R.layout.activity_main, parent, true);TextView textView (TextView) view.findViewById(R.id.title);textView.setText(datas[position]);return view;} 好了重点在第三行我将Adapter的getView方法所传回的ViewGroup parent对象放置到了inflate的第二个参数中使用,inflate的第三个参数为true,面试官当时问的就是会出现什么问题现在运行一下看Log: 出了java.lang.UnsupportedOperationException: addView(View, LayoutParams) is not supported in AdapterView的异常我们看一下问题出在哪 首先要看从getView第三个参数回调传回来的是什么我们来看源码 既然是adapter与AbsListView结合使用那getView方法一定是在AbsListView中被使用的来找一找 首先该怎么找呢咱们都知道AbsListView通过setAdapter方法使两者结合那么入口就在这里 Overridepublic void setAdapter(ListAdapter adapter) {if (mAdapter ! null mDataSetObserver ! null) {mAdapter.unregisterDataSetObserver(mDataSetObserver);}resetList();mRecycler.clear();if (mHeaderViewInfos.size() 0|| mFooterViewInfos.size() 0) {mAdapter new HeaderViewListAdapter(mHeaderViewInfos, mFooterViewInfos, adapter);} else {mAdapter adapter;}mOldSelectedPosition INVALID_POSITION;mOldSelectedRowId INVALID_ROW_ID;// AbsListView#setAdapter will update choice mode states.super.setAdapter(adapter);通过第13行可以知道adapter对象是赋给了mAdapter通过查看mAdapter是父类的属性那咱们就需要在父类中看什么时候使用了mAdaper.getView方法果然找到了在AbsListView的obtainView方法中找到了getView方法被使用的情况 View obtainView(int position, boolean[] isScrap) {isScrap[0] false;View scrapView;scrapView mRecycler.getTransientStateView(position);if (scrapView ! null) {return scrapView;}scrapView mRecycler.getScrapView(position);View child;if (scrapView ! null) {child mAdapter.getView(position, scrapView, this);if (child.getImportantForAccessibility() IMPORTANT_FOR_ACCESSIBILITY_AUTO) {child.setImportantForAccessibility(IMPORTANT_FOR_ACCESSIBILITY_YES);}if (child ! scrapView) {mRecycler.addScrapView(scrapView, position);if (mCacheColorHint ! 0) {child.setDrawingCacheBackgroundColor(mCacheColorHint);}} else {isScrap[0] true;child.dispatchFinishTemporaryDetach();}} else {child mAdapter.getView(position, null, this);通过第14行和最后一行可知它是将AbsListView的实现类传了过来。那好就回到 inflater.inflate(R.layout.activity_main, parent, true);这里继续向下看 public View inflate(int resource, ViewGroup root, boolean attachToRoot) {if (DEBUG) System.out.println(INFLATING from resource: resource);XmlResourceParser parser getContext().getResources().getLayout(resource);try {return inflate(parser, root, attachToRoot);} finally {parser.close();}}这里调用了重载方法inflate(parser, root, attachToRoot);在重载方法内部我们看到// We are supposed to attach all the views we found (int temp)// to root. Do that now.if (root ! null attachToRoot) {root.addView(temp, params);}也就是说把自定义的这个Item附加到了AbsListView上好。接下来看getView被返回的View被用作在了什么地方它目前已经有parent了。还是需要回到AbsListView.obtainView方法通过第14行可以看到这个通过getView方法返回的View最终被obtainView弹了出去继续看由于在AbsListView中没有找到使用obtainView的地方所以使用obtainView的地方应该在其子类中果不其然(这里通过ListView做演示) protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {// Sets up mListPaddingsuper.onMeasure(widthMeasureSpec, heightMeasureSpec);int widthMode MeasureSpec.getMode(widthMeasureSpec);int heightMode MeasureSpec.getMode(heightMeasureSpec);int widthSize MeasureSpec.getSize(widthMeasureSpec);int heightSize MeasureSpec.getSize(heightMeasureSpec);int childWidth 0;int childHeight 0;int childState 0;mItemCount mAdapter null ? 0 : mAdapter.getCount();if (mItemCount 0 (widthMode MeasureSpec.UNSPECIFIED ||heightMode MeasureSpec.UNSPECIFIED)) {final View child obtainView(0, mIsScrap);我们在最后一行看到了obtainView的身影它被用来做什么呢既然是onMeasure方法那就是测量呗没什么好说的再继续看在ListView中发现5处obtainView被调用的地方其中两处用于测量剩余3处通过 private void setupChild(View child, int position, int y, boolean flowDown, int childrenLeft,boolean selected, boolean recycled)这个方法将obtainView返回的View传了进来最终我们可以在该方法内部看到这么一段代码是属于ViewGroup的attachViewToParent(child, flowDown ? -1 : 0, p);---未完待续---
http://www.yutouwan.com/news/12211/

相关文章:

  • 兰州做网站哪家好18款app软件免费下载
  • phpcms v9 网站建设入门网站建设与维护工作待遇
  • 网站建设整体情况介绍如何做兼职网站平台
  • 欢迎访问中国建设银行网站西安官网优化报价
  • 南宁网站建设哪家公司运动鞋官方网站建设计划书
  • 怎么开免费网站小程序开发需要多少钱
  • 建设专业网站排名网站建设的类型有几种
  • 陕西省建设执业注册中心网站网站建设维护专员岗位说明
  • 网站做广告费用副标题wordpress
  • p2p网站建设 上海免费网站制作教程
  • 制作网站服务公司黑龙江高端网站建设
  • 网站建设需求分析范例在线设计工具的网站怎么做
  • 自己做服装搭配的网站金昌北京网站建设
  • 一般专业网站建设公司英文网站建设方案模板高校
  • 网站建设规划书范文5000字新建网站需要多少钱
  • 网站项目设计与制作综合实训新手如何免费建网
  • 建设网站职业证书优秀网页设计作品图片
  • 满洲里建设局网站百度精简版入口
  • 一个网站建设多少钱长沙景点预约攻略
  • 棋牌网站怎么做wordpress 获取文章列表
  • 济南asp网站制作公司西安学校网站建设公司
  • 大学信息化建设 网站群如何利用视频网站做推广
  • 电子商务网站建设 大纲泰安网站开发哪家便宜
  • 公司网站申请虚拟云手机免费永久
  • 免费域名网站申请注册公司需要多少钱保证金
  • 品牌型网站制作有哪些公司谷歌浏览器网页版入口手机版
  • 网站自建实体店营销策划公司
  • vue 做企业网站无锡网站建设策划方案
  • 门户网站如何运营汉中网站建设服务
  • 制作付款网站如何在卖家淘宝网站做产品链接