Intereting Posts

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

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

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

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

Solutions Collecting From Web of "Добавить дополнительный элемент в адаптер курсора android"

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

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

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

Как насчет использования комбинации MergeCursor и MatrixCursor как я предложил в этом вопросе: как вставить дополнительные элементы в SimpleCursorAdapter или Cursor для Spinner?

Переопределите 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); } 

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

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

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

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

Подобно добавлению дополнительного поля в базу данных, вы можете добавить дополнительное поле к проекции из базы данных. Это экономит вам немного места в вашем 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; 

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

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

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

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

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

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