Android ExpandableListView и загрузчик

Я пытаюсь использовать ExpandableListView с загрузчиком, но у меня есть некоторые проблемы. Моя задача - сделать первый запрос к моей базе данных и сгруппировать его по месяцам, затем для каждого месяца сделать запрос для всех зависимостей по месяцам. Я использую пользовательский контент-провайдер для доступа к моей базе данных. У меня нет проблем с инициализацией моего groupView, но у меня проблемы с моим childView. Я не знаю, как сделать мой запрос... мой первый запрос: ВЫБЕРИТЕ месяц, сумма ОТ ГРУППЫ OutGoUrlData ПО МЕСЯЦ. ЗАКАЗАТЬ ПО МЕСЯЦ; и мой второй для childView: ВЫБЕРИТЕ сумму ОТ OutGoUrlData, ГДЕ месяц = ​​XXX И nameCarId = 1; где XXX зависит от моей родительской группы

MyActivity.java

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.out_go_layout);
    expandableListView = (ExpandableListView)this.findViewById(R.id.expandableListView);
    Log.d("treeadaptertag", "OutGoActivity thread : " + Thread.currentThread());
    debugId = (TextView)this.findViewById(R.id.infoIdDebug_out_go);
  //  initSpinner();
    Intent i = this.getIntent();
     s = i.getLongExtra("id", -1);//From main activity

    String[] groupFrom={DataCarContract.OUTGO_COLUMN_MONTH};
    int[] groupTo={android.R.id.text1};
    String[] childFrom={DataCarContract.OUTGO_COLUMN_DATE,DataCarContract.OUTGO_COLUMN_AMOUNT};
    int[] childTo={R.id.out_go_textview,R.id.amount_textView};

    outGoSimpleCursorTreeAdapter = new OutGoSimpleCursorTreeAdapter(this,
            null,
            android.R.layout.simple_expandable_list_item_1,
            R.layout.spinner_item_layout,
            groupFrom,
            groupTo,
            R.layout.spinner_item_layout,
            childFrom,
            childTo);

    expandableListView.setAdapter(outGoSimpleCursorTreeAdapter);
    getLoaderManager().initLoader(-1, null, this);

}

  @Override
public Loader<Cursor> onCreateLoader(int loaderID, Bundle args) {
    Log.d(OUTGO_TAG, "onCreateLoader OutGoActivity");

    String[] projectionChild = {DataCarContract._ID, DataCarContract.OUTGO_COLUMN_AMOUNT, DataCarContract.OUTGO_COLUMN_PRICE,DataCarContract.OUTGO_COLUMN_DATE};
    String selectionChild = DataCarContract.OUTGO_NAME_CAR_ID + "=? AND  " + DataCarContract.OUTGO_COLUMN_MONTH+" =?";
    String[] selectionChildArgs = {String.valueOf(s), String.valueOf(XXX)};//need value of the group parent month???


    String[] projectionBill = {DataCarContract._ID, DataCarContract.BILL_TYPE};

    if(loaderID ==-2){
        return new CursorLoader(this, DataCarContract.BILLURL_TABLE_CONTENTURI, projectionBill, null, null, null);
    }
    else if(loaderID != -1){
        //Child cursor id
        return new CursorLoader(this,DataCarContract.OUTGOURL_TABLE_CONTENTURI,projectionChild,selectionChild ,selectionChildArgs,null);
    }else{
        //Parent cursor id
        String[] projectionGroup = {DataCarContract._ID, DataCarContract.OUTGO_COLUMN_MONTH};
        String selectionParent = DataCarContract.OUTGO_NAME_CAR_ID + "=? ";
        String[] selectionArgsParents = {String.valueOf(s)};
        CursorLoader cl = new CursorLoader(this,DataCarContract.OUTGOURL_TABLE_CONTENTURI,projectionGroup,selectionParent+" GROUP BY (" + DataCarContract.OUTGO_COLUMN_MONTH+ ")",selectionArgsParents ,null);
         return  cl;
    }

Вот мой метод для получения дочернего представления от моего адаптера (я расширяю SimpleCursorTreeAdapter)

@Override
protected Cursor getChildrenCursor(Cursor groupCursor) {

    Log.d(SIMPLE_CURSOR_TREE_TAG, "getChildrenCursor");

    int id = groupCursor.getInt(groupCursor.getColumnIndex(DataCarContract.COLUMN_NAME_ROWID));
    int pos =  groupCursor.getPosition();
    //String month = groupCursor.getString(groupCursor.getColumnIndex(DataCarContract.OUTGO_COLUMN_MONTH));
    hashMap.put(id, pos);
    sparseArray.append(id,pos);


    Loader<Cursor> childCursorLoader = ctxOut.getLoaderManager().getLoader(id);

    if (childCursorLoader!=null &&!childCursorLoader.isReset() ){
        ctxOut.getLoaderManager().restartLoader(id,null,ctxOut);
    }else{
        ctxOut.getLoaderManager().initLoader(id,null,ctxOut);
    }
    return null;
}

Моя проблема в том, что мне нужны данные из моего курсора для выполнения моего запроса, но я не знаю, как "передать" мои данные из моего адаптера в мой загрузчик. Вот картинка, что мне нужно. введите описание изображения здесь Может быть лучшим решением....? Не могли бы вы мне помочь.

0 ответов

Другие вопросы по тегам