Поиск требует данных из нескольких курсоров / таблиц - PullRequest
1 голос
/ 29 августа 2010

Я все еще пытаюсь реализовать функцию поиска в своем приложении для Android. Пока все идет хорошо, хотя в настоящее время поиск может запрашивать только одну таблицу и отображать результаты для этой таблицы (это ListView с использованием SimpleCursorAdapter).

Я хочу иметь возможность поиска по нескольким таблицам, но я не уверен, как собрать все это в один курсор или расширить SimpleCursorAdapter для реализации нескольких курсоров. Я вижу, что есть класс с именем CursorJoiner, но я не уверен, что мне нужно с ним делать.

Спасибо!

Я пытался создать специальный курсор [], но он ничего не возвращает, и мои результаты поиска пустые - кто-нибудь может помочь?

public class SearchCursorAdapter extends SimpleCursorAdapter {

private int currentCursor;
private int curPosition = 0;
private int total = 0;
private Cursor[] curs = null;
private Context cont;

public SearchCursorAdapter(Context context, int layout, Cursor c,
        String[] from, int[] to) {

    super(context, layout, c, from, to);
    total = c.getCount();

}

public SearchCursorAdapter(Context context, int layout, Cursor[] c,
        String[] from, int[] to) {

    super(context, layout, null, from, to);
    int l = c.length;
    for (int i = 0; i < l; i++) {

        total += c[i].getCount();

    }
    curs = c;
    currentCursor = 0;
    cont = context;
}

@Override
public View getView(int position, View view, ViewGroup parent) {

    if (currentCursor == curs.length)
        return null;

    if (curs == null) {

        //normal shiz

    }
    else {

        Cursor c = curs[currentCursor];
        c.moveToPosition(curPosition);

        if (c.isAfterLast()) {

            currentCursor++;
            c = curs[currentCursor];
            curPosition = 0;
            c.moveToPosition(curPosition);

        }

        if (view == null) {
            LayoutInflater vi = (LayoutInflater)parent.getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            view = vi.inflate(R.layout.search_row, null);
        }

        TextView t1 = (TextView)view.findViewById(R.id.rowitem_text1);
        TextView t2 = (TextView)view.findViewById(R.id.rowitem_text2);

        t1.setText(c.getString(1));
        t2.setText("Testing");

        curPosition++;

    }

    return view;

только что заметил, что на самом деле адаптер не возвращает ничего, что-то не так с моей поисковой активностью ...

1 Ответ

2 голосов
/ 29 августа 2010

Я хочу иметь возможность искать несколько таблиц, но я не уверен, как чтобы получить все это в один курсор или расширить SimpleCursorAdapter до реализовать несколько курсоров

Если вы используете SQLite, внедрите JOIN в свой оператор SELECT. Если вы по какой-то причине завернули SQLite в поставщика контента, предоставьте другой контент Uri и поддержку поиска в нескольких таблицах.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...