Подтвердить что ты не робот

Добавить дополнительный элемент в адаптер курсора android

У меня есть курсор, содержащий все строки из моей базы данных. Этот Курсор я передаю в CursorAdapter и покажу данные в списке. Но мне нужно показать один дополнительный элемент в начале. Как я могу это сделать?

Я где-то читал, что, возможно, это может быть сделано с помощью CursorWrapper, и он может вводить дополнительные значения в результаты. Но я не совсем уверен, как это сделать.

Если кто-то может показать мне пример (код), или есть другая идея, как это решить, сообщите мне. спасибо!

4b9b3361

Ответ 1

Вы можете использовать представление списка addHeaderView() или addFooterView():

TextView label = new TextView(context);
label.setText("Something Here");

listView.addHeaderView(label);

Просто не забудьте сделать это, прежде чем называть setAdapter().

Ответ 3

Заменить getCount следующим образом:

@Override
public int getCount() {
    final int count = super.getCount();
    return count+1;
}

и кто когда-либо использует адаптер, получает одну дополнительную строку. Просто не забудьте обработать это в getView, т.е.

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        if(position == 0) {
            final View v = inflater.inflate(R.layout.special_suggestion, parent,false);
            final TextView tv = (TextView) v.findViewById(android.R.id.text1);
            tv.setText("Search for '" + this.keyword + "'");
            return v;
        }
        else {
            try {
                return super.getView(position, convertView, parent);
            }
            catch (IllegalStateException e) {
                Log.e(TAG, "IllegalStateException: " + e);
            }
        }
        return inflater.inflate(this.layout, parent,false);
    }

Ответ 4

Вы можете читать данные из Cursor в List<YourRow>, где YourRow - это класс для данных из вашей строки курсора. Затем просто добавьте новый элемент YourRow в список и используйте BaseAdapter для вашего ListView. Прочитайте этот, чтобы узнать, как бороться с BaseAdapter.

Ответ 5

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

Я также нашел это обсуждение [https://groups.google.com/forum/?fromgroups=#!topic/android-developers/QSOGjgL8kXI], поэтому, если у кого-то есть аналогичная проблема, это будет отправной точкой. спасибо!

Ответ 6

В адаптере вы можете, вероятно, показать дополнительные данные в методе getView. Но это зависит от того, откуда поступают данные, что вы хотите с ним делать (просто отобразите?) И т.д.

Ответ 7

Аналогично добавлению дополнительного поля в базу данных, вы можете добавить дополнительное поле к проекции из базы данных. Это экономит вам немного места в вашем db и уменьшает избыточность информации. Это означает, что поле повторно вычисляет каждый доступ, а не просто сохраняется.

Вот пример проекции, который я использовал для форматирования стоимости, основанной на цене предмета (хранящегося в центах) и связанного с ним элемента.

public static final String CONCATE_COST
        = "'$' || CASE WHEN SUBSTR(ROUND("+COLUMN_PRICE
            +"/100.0, 2), LENGTH(ROUND("+COLUMN_PRICE
            +"/100.0, 2))-1, 1)='.' THEN ROUND("+COLUMN_PRICE
            +"/100.0, 2) || '0' else ROUND("+COLUMN_PRICE
            +"/100.0, 2) end || "+COLUMN_UNIT;

Используйте это как столбец для перехода к вашему списку, и вы можете напрямую связать его с полем в вашем представлении.

Ответ 8

В таких случаях мое решение заключается в выполнении запроса UNION со статическими значениями. EX:

(Выберите -1 как id, "ЗДЕСЬ ИДЕТ ИМЯ" как имя, "ЗДЕСЬ ИДЕТ АДРЕС" в качестве адреса) UNION (Выберите идентификатор, имя, адрес из списка контактов по имени)

(синтаксис doublecheck, пожалуйста, я делаю по памяти)

Таким образом, вы получаете первую строку с -1 | ЗДЕСЬ ИДЕТ ИМЯ | ЗДЕСЬ ИДЕТ АДРЕС плюс остальные строки

Итак, вы не "загрязняете" базу данных и легко включаете/выключаете первую строку с условиями и играете с конкатенациями.