当前位置: 代码迷 >> Android >> android播放器(music player)源码分析二(BaseExpandableListAdapter, SimpleCursorTreeAdapter
  详细解决方案

android播放器(music player)源码分析二(BaseExpandableListAdapter, SimpleCursorTreeAdapter

热度:215   发布时间:2016-05-01 15:46:09.0
android播放器(music player)源码分析2(BaseExpandableListAdapter, SimpleCursorTreeAdapter

1)SimpleExpandableListAdapterBaseExpandableListAdapter

? 其构造函数接受八个参数

this(context, groupData, expandedGroupLayout, collapsedGroupLayout, groupFrom, groupTo, childData, childLayout, lastChildLayout, childFrom, childTo);
?

?

一般在使用中expandedGroupLayout,collapsedGroupLayout是一个参数生成的,childLayout, lastChildLayout也是一个参数生成的。之所以区别它们是由于存在这样的需求:展示不同动作下不同的view(展开和合起)、展示不同组之间最后一个孩子节点的现实布局。

?

这里需要注意一点在BaseExpandableListAdapter中,如果使用以下类似newGroupView方法

public View newGroupView(boolean isExpanded, ViewGroup parent) { return mInflater.inflate((isExpanded) ? mExpandedGroupLayout : mCollapsedGroupLayout,parent, false);
?

?

在绑定其内容时要注意以下几点:

  1. 其绑定的内容一定要和groupPosition相对应,其内容最好不要动态生成否则会导致不稳定的绑定。类似如果是要绑定孩子节点的内容,则要和groupPositionchildPosition一一对应。并且每次调用都需要重写绑定一次,不能根据convertView进行判定。(convertViewgetChildView等方法里面的参数)
  2. 重写getChild方法时需要返回自己所需的数据结构,视情况定义自己的数据结构。
  3. mInflater.inflate方法在实例化一个layout时,可能会创建了别的grouplayout,(这个暂时没有弄清楚为什么会有这样的原因,帮忙补充一下)。可是当使用? TextView textView = new TextView(Class.this)时,不会产生这样的问题,每次绑定内容时convertView一定是空的。

?

?

2SimpleCursorTreeAdapterResourceCursorTreeAdapter

?? 该类接受一个cursor作为参数,而musicplayer中则接受一个null值。这里使用AsyncQueryHandler生成内部的cursor

?? 其流程如下:

  1. 首先创建在适配其中创建AsyncQueryHandler,此时cursor为空
  2. 在主程序中调用适配器的AsyncQueryHandler开始一个sql语句,此时在重载的completeXX方法中将生成的cursor赋给适配器

?

            @Override            protected void onQueryComplete(int token, Object cookie, Cursor cursor) {                //Log.i("@@@", "query complete: " + cursor.getCount() + "   " + mActivity);                if (cursor != null) {                    cursor = mActivity.mergedCursor(cursor);                }                mActivity.init(cursor);            }
?

?

????? 3.适配器自动调用getbind方法生成布局。在绑定其内容时要注意使用了cursor不能够自定义groupchild的大小,其大小由cursor指定

  相关解决方案