2011-03-05 4 views
3

ID, 날짜 및 문자열의 세 열이있는 sqlite 데이터베이스가 있습니다. 단일 날짜의 경우 연결된 여러 문자열이있을 수 있으므로 다른 날짜와 동일한 날짜의 행이 여러 개 있습니다.SimpleCursorTreeAdapter 및 getChildrenCursor() 도움말

이 데이터를 표시하려면 ExpandableListView를 사용하고 싶습니다. 이 목적으로 사용하려면 SimpleCursorTreeAdapter에서 getChildrenCursor()를 구현해야하지만 그렇게하는 방법을 모르겠습니다. this을 보았는데 managedQuery를 사용하는 것을 볼 수 있지만 콘텐츠 공급자가 없으므로 사용할 수 없습니다. 내가 understand에서 getChildrenCursor()의 목적은 자식에 넣을 수있는 데이터만으로 커서를 가져 오는 것입니다. 그러나이 메서드는 날짜를 기준으로 항목을 구분하는 방법을 볼 수 없습니다. 파라미터로서의 Cursor

+0

업데이트 : 코드를 둘러싼 뒤 아무데도 가지 않고서도 포기하고 방금 ListView를 사용했습니다. – colig

+0

나는 여기서 언급 한 것과 똑같은 문제를 발견했다. 같은 것을 해결할 수 있습니까? –

+0

나는 비슷한 것을하고있다. http://stackoverflow.com/questions/10611927/simplecursortreeadapter-and-cursorloader – toobsco42

답변

0
public class MyExpandableListAdapter extends SimpleCursorTreeAdapter { 

    public MyExpandableListAdapter(Cursor cursor, Context context, int groupLayout, 
      int childLayout, String[] groupFrom, int[] groupTo, String[] childrenFrom, 
      int[] childrenTo) { 
     super(context, cursor, groupLayout, groupFrom, groupTo, childLayout, childrenFrom, 
       childrenTo); 
    } 

    @Override 
    @SuppressWarnings("deprecation") 
    protected Cursor getChildrenCursor(Cursor groupCursor) { 
     // Given the group, we return a cursor for all the children within that group 
     // Return a cursor that points to this contact's phone numbers 
     Uri.Builder builder = People.CONTENT_URI.buildUpon(); 
     ContentUris.appendId(builder, groupCursor.getLong(mGroupIdColumnIndex)); 
     builder.appendEncodedPath(People.Phones.CONTENT_DIRECTORY); 
     Uri phoneNumbersUri = builder.build(); 
     // The returned Cursor MUST be managed by us, so we use Activity's helper 
     // functionality to manage it for us. 
     return managedQuery(phoneNumbersUri, mPhoneNumberProjection, null, null, null); 
    } 
} 
+0

제 질문을 신중하게 읽어주십시오. 나는 콘텐츠 제공자를 사용하고 싶지 않다. – colig

0

가 나는 8개월 너무 늦게, 그러나 아직도 알고있다.

콘텐츠 공급자없이 커서를 만들 수 있습니다. SQLite 데이터베이스를 열고 db.query (...)를 수행하면 커서가 생성됩니다. 이는 콘텐츠 제공 업체가 커서를 만드는 것과 같은 방식입니다.

0

ContentProvider를 사용하지 않으려면 AsyncTask에서 쿼리를 실행 해보십시오. 그런 다음 onPostExecute 내부의 changeCursor 메소드를 사용하여 커서를 바꿉니다. 이 API 11

에서 감가 상각 된 바와 같이

managedQuery는 groupCursor 객체가 자식 데이터를 쿼리에 사용하기 위해 "_id"를 얻을라고 할 수 있습니다 사용할 수 없습니다. SELECT * FROM 'TABLE'WHERE ID =?와 같습니다. "?" 다른 테이블에서 외래 키로 사용될 가능성이 가장 큰 그룹 커서의 ID 열입니다. 그래도 혼란 스럽다면 google에서 '데이터베이스 정규화'를 검색해보십시오.