Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> Android開發實例 >> android播放器(music player)源碼分析2(BaseExpandableListAdapter, SimpleCursorTreeAdapter

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

編輯:Android開發實例

1) SimpleExpandableListAdapter 和 BaseExpandableListAdapter

  其構造函數接受八個參數

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

 

 

一般在使用中 expandedGroupLayout, collapsedGroupLayout 是一個參數生成的, childLayout, lastChildLayout 也是一個參數生成的。之所以區別它們是由於存在這樣的需求:展示不同動作下不同的 view (展開和合起)、展示不同組之間最後一個孩子節點的現實布局。

 

這裡需要注意一點在 BaseExpandableListAdapter 中,如果使用以下類似 newGroupView 方法

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

 

 

在綁定其內容時要注意以下幾點:

  1. 其綁定的內容一定要和 groupPosition 相對應,其內容最好不要動態生成否則會導致不穩定的綁定。類似如果是要綁定孩子節點的內容,則要和 groupPosition 、 childPosition 一一對應。並且每次調用都需要重寫綁定一次,不能根據 convertView 進行判定。( convertView 是 getChildView 等方法裡面的參數)
  2. 重寫 getChild 方法時需要返回自己所需的數據結構,視情況定義自己的數據結構。
  3. mInflater.inflate 方法在實例化一個 layout 時,可能會創建了別的 group 的 layout ,(這個暫時沒有弄清楚為什麼會有這樣的原因,幫忙補充一下)。可是當使用   TextView textView = new TextView(Class.this) 時,不會產生這樣的問題,每次綁定內容時 convertView 一定是空的。

 

 

2 ) SimpleCursorTreeAdapter 和 ResourceCursorTreeAdapter

   該類接受一個 cursor 作為參數,而 musicplayer 中則接受一個 null 值。這裡使用 AsyncQueryHandler 生成內部的 cursor 。

   其流程如下:

  1. 首先創建在適配其中創建 AsyncQueryHandler ,此時 cursor 為空
  2. 在主程序中調用適配器的 AsyncQueryHandler 開始一個 sql 語句,此時在重載的 completeXX 方法中將生成的 cursor 賦給適配器

 

  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. }  

 

 

      3.適配器自動調用 get 和 bind 方法生成布局。在綁定其內容時要注意使用了 cursor 不能夠自定義 group 和 child 的大小,其大小由 cursor 指定

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved