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

1) SimpleExpandableListAdapterBaseExpandableListAdapter

  其构造函数接受八个参数

Java代码   
  1. this(context, groupData, expandedGroupLayout, collapsedGroupLayout, groupFrom, groupTo, childData, childLayout, lastChildLayout, childFrom, childTo);  
this(context, groupData, expandedGroupLayout, collapsedGroupLayout, groupFrom, groupTo, childData, childLayout, lastChildLayout, childFrom, childTo);
 

 

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

 

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

Java代码   
  1. public View newGroupView(boolean isExpanded, ViewGroup parent) {   
  2.   
  3.  return mInflater.inflate((isExpanded) ? mExpandedGroupLayout : mCollapsedGroupLayout,   
  4.   
  5. parent, false);  
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 赋给适配器

 

Java代码   
  1. @Override  
  2. protected void onQueryComplete(int token, Object cookie, Cursor cursor) {   
  3.     //Log.i("@@@", "query complete: " + cursor.getCount() + "   " + mActivity);   
  4.     if (cursor != null) {   
  5.         cursor = mActivity.mergedCursor(cursor);   
  6.     }   
  7.     mActivity.init(cursor);   
  8. }  
            @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 指定

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值