当前位置:   article > 正文

简析 Android Adapter适配器的内部调用流程_android适配器中的使用点击调用另一个公共方法

android适配器中的使用点击调用另一个公共方法

我们都知道使用Adapter为ListView或GridView填充数据,而我们需要实现Adapter里的getView、getCount等方法。但内部到底是怎么调用,怎么调用的getView方法,就需要看源码了,下面来简单分析一下:

以GridView为例,为它设置适配器的方法是GridView.setAdapter:

  1. @Override
  2. public void setAdapter(ListAdapter adapter) {
  3. 。。。。。。
  4. mDataSetObserver = new AdapterDataSetObserver();
  5. mAdapter.registerDataSetObserver(mDataSetObserver);
  6. 。。。。。。
  7. requestLayout();//调用了requestLayout重绘布局方法,简称 重绘(1)。
  8. }
方法中为adapter注册了一个监听器AdapterDataSetObserver,它存在于GridView的父类AbsListView中(其实这个监听器的真正实现是在AdapterView类中),这个监听器有一个主要的监听方法:
  1. public void onChanged() {
  2.             mDataChanged = true;
  3.             mOldItemCount = mItemCount;
  4.             mItemCount = getAdapter().getCount();
  5.             // Detect the case where a cursor that was previously invalidated has
  6.             // been repopulated with new data.
  7.             if (AdapterView.this.getAdapter().hasStableIds() && mInstanceState != null
  8.                     && mOldItemCount == 0 && mItemCount > 0) {
  9.                 AdapterView.this.onRestoreInstanceState(mInstanceState);
  10.                 mInstanceState = null;
  11.             } else {
  12.                 rememberSyncState();
  13.             }
  14.             checkFocus();
  15.             requestLayout();//注意这里也调用了重绘布局方法,简称 重绘(2)。
  16.         }
requestLayout会向系统发一个重新布局的message,重新布局就要重新测量,就要走measure流程,最终会调用到GridView中的onMeasure方法(具体过程可查看android内核剖析的第十三章关于View的绘制内容)。而在GridView的onMeasure中就会调用为GridView设置的Adapter对象的getCount、getItemType方法还会调用一个obtainView(存在于GridView的父类AbsListView中),obtainView中会就会调用Adapter的getView方法来获得单个Item的View了。
 

了解了这些之后,就可以清楚的了解适配器的调用流程了:

场景1:我们在为GridView设置Adapter(GridView.setAdapter)时最终会调用 “重绘(1)”,然后就会一直调用到GridView的onMeasure方法,在onMeasure方法里就会调用Adapter的getcount、getView等方法获取数据了。

场景2:当数据源改变,我们会调用adapter的notifyDataSetChanged方法来刷新数据,这样会触发Adapter中注册的监听器,最终会调用“重绘(2)”,之后就同场景1的过程一样来获取adapter的数据了。




声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/盐析白兔/article/detail/250968
推荐阅读
相关标签
  

闽ICP备14008679号