Давайте назовем ваш объект сущностей entities-module
. Этот проект содержит POJO
классов с аннотациями JAXB
, такими как: @XmlElement
, @XmlType
и т. Д. Поскольку, как вы написали, « JAXB« устарел »на Android », вам необходимо выберите между: прочитайте JAXB
аннотации другими инструментами или создайте новую настроенную POJO
структуру.
JAXB
другими инструментами. Библиотека Jackson
хорошо поддерживает аннотации JAXB
. Все, что вам нужно сделать, это использовать модуль jackson-module-jaxb-annotations
. Его легко зарегистрировать, и если вы уже используете Jackson
для сериализации / десериализации JSON
, это очевидный выбор. Как это сделать, вы можете найти ответы на этот вопрос в SO: Использование JAXB с Google Android .
Плюсы:
POJO
. Restful API
вы используете следующую версию проекта entities-module
. Минусы:
JAXB
на Android
. JAXB
и Jackson
. Второй вариант - создать новый модуль с POJO
с и использовать более быструю и меньшую библиотеку, такую как SimpleXML
.
Плюсы:
JAXB
классами. Минусы:
API
вам необходимо продублировать изменения в нескольких модулях. Вам нужно взглянуть на вышеприведенный список pros and cons
и решить, что лучше для вас.
Я также хотел бы добавить еще две опции:
JAXB
аннотации на Jackson
аннотации. Jackson
имеет действительно хорошую поддержку XML
, кроме отличной для JSON
. Это позволит вам легко поддерживать форматы JSON
и XML
в вашем API
. Также вы можете использовать библиотеку Jackson
в Android
. JSON
API
для Android
приложения. В большинстве случаев потоки UI
в приложении Android
отличаются от приложений Web App
, и, возможно, вы все равно придете к этой идее. Хорошо ... вот и трудный для переваривания ответ, который я понял только вчера. Это моя ошибка, хотя я не упомянул одну важную вещь в моем вопросе, потому что я чувствовал, что это не имеет отношения к рассматриваемой проблеме:
Данные в таблице данных не были отсортированы. Поэтому я установил для свойства Sorted списка значение true . Позже я понял, что когда свойство сортировки списка или даже поля со списком имеет значение true, то член значения не устанавливается должным образом. Поэтому, если я напишу:
lb.SelectedValue = valuePassedByUser;
, он устанавливает какой-то другой элемент как выбранный, а не устанавливает тот, значение которого равно valuePassedByUser. Короче это портит индексы.
Например, если мои исходные данные:
Index ValueMember DisplayMember
1 A Apple
2 M Mango
3 O Orange
4 B Banana
И я установил sorted = true. Затем элементы списка:
Index ValueMember DisplayMember
1 A Apple
2 B Banana
3 M Mango
4 O Orange
Теперь, если я хочу установить Banana как выбранный, я запускаю stmt:
lb.SelectedValue = "B";
Но вместо того, чтобы установить «Банан» как выбранный, он устанавливает «Оранжевый» как выбранный. Почему? Поскольку, если бы список не был отсортирован, индекс банана был бы равен 4. Таким образом, даже если после сортировки индекса банана значение 2, он устанавливает индекс 4 как выбранный, тем самым делая выбранным апельсин вместо банана.
Следовательно, для отсортированного списка я использую следующий код для установки выбранных элементов:
private void SetSelectedBreakType(ListBox lb, string value)
{
for (int i = 0; i < lb.Items.Count; i++)
{
DataRowView dr = lb.Items[i] as DataRowView;
if (dr["value"].ToString() == value)
{
lb.SelectedIndices.Add(i);
break;
}
}
}
Я думаю, что единственный способ выбрать несколько элементов - это использовать цикл foreach. Кажется, что свойство SelectedValue возвращает только 1 элемент. Если вы хотите выбрать более одного элемента, вам придется использовать:
var tempListBox = c As ListBox;
if (tempListBox != null)
(tempListBox.SelectedItems.Add(tempListBox.Items[tempListBox.FindStringExact(fieldValue)]);
Также FindStringExact не выполняет поиск по полям значений, а только просматривает отображаемый текст. Кроме того, для сокращения кода может потребоваться преобразование новой переменной в список, чтобы вы не преобразовывали C в список.
Try this:-
var listBox = c as ListBox;
var item = listBox.Items.FindByValue(fieldValue);
if (item != null)
listBox.SelectedValue = fieldValue;
Вы можете использовать "FindByValue" следующим образом:
ListBox.SelectedIndex = ListBox.Items.IndexOf(ListBox.Items.FindByValue(fieldValue))