android 플레이어 (music player) 소스 분석 2 (BaseExpandableListAdapter, SimpleCursorTreeAdapter

1) Simple ExpandableListAdapter 와 Base ExpandableListAdapter
  그 구조 함 수 는 8 개의 매개 변 수 를 받는다.
this(context, groupData, expandedGroupLayout, collapsedGroupLayout, groupFrom, groupTo, childData, childLayout, lastChildLayout, childFrom, childTo);
 
 
일반적으로 사용 중 expanded GroupLayout, collapsed GroupLayout 는 하나의 매개 변수 로 생 성 되 며, child Layout, last Child Layout 도 하나의 매개 변수 로 생 성 됩 니 다.이들 을 구별 하 는 이 유 는 이러한 수요 가 존재 하기 때문이다. 서로 다른 동작 에서 서로 다른 view (전개 와 합 기) 를 보 여주 고 서로 다른 그룹 간 의 마지막 아이 노드 의 현실 구 조 를 보 여 주 는 것 이다.
 
BaseExpandableListAdapter 에서 다음 과 같은 newGroupView 방법 을 사용 하면 주의해 야 합 니 다.
public View newGroupView(boolean isExpanded, ViewGroup parent) {

 return mInflater.inflate((isExpanded) ? mExpandedGroupLayout : mCollapsedGroupLayout,

parent, false);
 
 
그 내용 을 귀속 할 때 다음 과 같은 몇 가 지 를 주의해 야 한다.
  • 바 인 딩 된 내용 은 반드시 groupPosition 과 대응 해 야 합 니 다. 그 내용 은 동적 으로 생 성 되 지 않 는 것 이 좋 습 니 다. 그렇지 않 으 면 불안정 한 바 인 딩 을 초래 할 수 있 습 니 다.아이 노드 를 연결 하려 는 내용 이 라면 groupPosition, childPosition 과 일일이 대응 해 야 합 니 다.또한 호출 할 때마다 바 인 딩 을 다시 써 야 하 며 convertView 에 따라 판단 할 수 없습니다.(convertView 는 getChildView 등 방법 중의 매개 변수)
  • getChild 방법 을 다시 쓸 때 필요 한 데이터 구 조 를 되 돌려 상황 에 따라 자신의 데이터 구 조 를 정의 해 야 합 니 다.
  • mInflater. inflate 방법 은 layot 를 실례 화 할 때 다른 group 의 layot 를 만 들 수 있 습 니 다.그러나  TextView textView = new TextView (Class. this) 에 서 는 이러한 문제 가 발생 하지 않 습 니 다. 내용 을 바 인 딩 할 때마다 convertView 는 비어 있 을 것 입 니 다.

  •  
     
    2) Simple Cursor TreeAdapter 와 Resource Cursor TreeAdapter
       이 종 류 는 cursor 를 매개 변수 로 받 아들 이 고, musicplayer 에 서 는 null 값 을 받 습 니 다.여기에 AsyncQuery Handler 를 사용 하여 내부 의 cursor 를 생 성 합 니 다.
       그 절 차 는 다음 과 같다.
  • 우선 어 울 리 는 곳 에 AsyncQuery Handler 를 만 듭 니 다. 이 때 cursor 가 비어 있 습 니 다
  • 주 프로그램 에서 어댑터 를 호출 하 는 AsyncQuery Handler 에서 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. 어댑터 는 get 과 bid 방법 으로 레이아웃 을 자동 으로 호출 합 니 다.내용 을 연결 할 때 cursor 를 사용 하면 group 과 child 의 크기 를 정의 할 수 없습니다. 크기 는 cursor 에서 지정 합 니 다.

    좋은 웹페이지 즐겨찾기