У меня есть вид обновления, где мне нужно предварительно выбрать значение, хранящееся в базе данных для Spinner.
Я имел в виду что-то подобное, но у меня Adapter
нет indexOf
метода, поэтому я застрял.
void setSpinner(String value)
{
int pos = getSpinnerField().getAdapter().indexOf(value);
getSpinnerField().setSelection(pos);
}
Простой способ установить счетчик на основе значения
Путь к сложному коду уже есть, это гораздо проще.
источник
break;
когда найден индекс, чтобы ускорить процесс.0
этого вы должны вернуть,-1
если значение не найдено - как показано в моем ответе: stackoverflow.com/a/32377917/1617737 :-)0
качестве резервного сценария. Если вы установите-1
, какой элемент будет виден на счетчике, я предполагаю, что 0-й элемент адаптера счетчика, добавление -1 также добавляет избыточный вес проверки, является ли значение -1 или нет, причина установки -1 вызовет исключение.Я держу отдельный ArrayList всех предметов в моих Spinners. Таким образом, я могу сделать indexOf для ArrayList и затем использовать это значение, чтобы установить выбор в Spinner.
источник
Основываясь на ответе Merrill , я придумал это однострочное решение ... оно не очень красивое, но вы можете обвинить любого, кто поддерживает код, за то,
Spinner
что он пренебрегает включением функции, которая делает это для этого.Вы получите предупреждение о том, как
ArrayAdapter<String>
не проверено ... на самом деле, вы можете просто использоватьArrayAdapter
как Merrill, но это просто заменяет одно предупреждение на другое.источник
если вы используете строковый массив, это лучший способ:
источник
Вы также можете использовать это,
источник
Если вам нужен метод indexOf на любом старом адаптере (и вы не знаете базовую реализацию), вы можете использовать это:
источник
Основываясь на ответе Merrill, вот как это сделать с помощью CursorAdapter
источник
Используйте следующую строку, чтобы выбрать, используя значение:
источник
Я использую специальный адаптер, для этого достаточно кода:
Итак, ваш фрагмент кода будет выглядеть так:
источник
Это мой простой способ получить индекс по строке.
источник
Вы можете использовать этот способ, просто сделайте ваш код более простым и понятным.
Надеюсь, поможет.
источник
вот мое решение
и getItemIndexById ниже
Надеюсь, это поможет!
источник
Вот как это сделать, если вы используете
SimpleCursorAdapter
(гдеcolumnName
имя столбца БД, который вы использовали для заполненияspinner
):Также (уточнение ответа Ахила ) это соответствующий способ сделать это, если вы заполняете свой Spinner из массива:
источник
Если вы установите массив XML для счетчика в макете XML, вы можете сделать это
источник
На самом деле есть способ получить это, используя поиск по индексу в AdapterArray, и все это можно сделать с помощью отражения. Я даже пошел на шаг дальше, так как у меня было 10 счетчиков, и я хотел установить их динамически из своей базы данных, и база данных содержит значение, а не текст, поскольку Spinner фактически меняет неделю на неделю, поэтому значение - это мой номер идентификатора из базы данных.
Вот индексированный поиск, который вы можете использовать практически в любом списке, если поля находятся на верхнем уровне объекта.
Метод приведения, который можно создать для всех примитивов, один для string и int.
источник
Чтобы приложение запомнило последние выбранные значения счетчика, вы можете использовать следующий код:
Код ниже считывает значение счетчика и соответственно устанавливает его положение.
И поместите ниже код, где вы знаете, что последние значения счетчика присутствуют, или где-то еще, как требуется. Этот фрагмент кода в основном записывает значение счетчика в SharedPreferences.
источник
У меня была та же проблема при попытке выбрать правильный элемент в счетчике, заполненном с помощью cursorLoader. Я получил идентификатор элемента, который я хотел сначала выбрать из таблицы 1, а затем использовал CursorLoader для заполнения счетчика. В onLoadFinished я перебирал курсор, заполняя адаптер прядильщика, пока не нашел элемент, соответствующий идентификатору, который у меня уже был. Затем присваивается номер строки курсора выбранной позиции счетчика. Было бы неплохо иметь аналогичную функцию для передачи идентификатора значения, которое вы хотите выбрать в счетчике, при заполнении деталей в форме, содержащей сохраненные результаты счетчика.
источник
Поскольку некоторые из предыдущих ответов очень верны, я просто хочу, чтобы никто из вас не попал в такую проблему.
Если вы установите значения на
ArrayList
использованиеString.format
, вы ДОЛЖНЫ получить позицию значения, используя ту же структуру строкString.format
.Пример:
Вы должны получить позицию нужного значения следующим образом:
В противном случае вы получите
-1
, элемент не найден!Я использовал
Locale.getDefault()
из-за арабского языка .Я надеюсь, что это будет полезно для вас.
источник
Вот мое, надеюсь, полное решение. У меня есть следующее перечисление:
используется в следующем классе
Код для установки счетчика по члену перечисления HTTPMethod:
Где
R.id.spinnerHttpmethod
определяется в layout-файле иandroid.R.layout.simple_spinner_item
доставляется android-студией.источник
источник
очень просто просто использовать
getSelectedItem();
например:
вышеуказанный метод возвращает строковое значение
в приведенном выше
R.array.admin_type
это строковый файл ресурсов в значенияхпросто создайте XML-файл в значениях >> строк
источник
Предположим, вам нужно заполнить счетчик из строкового массива из ресурса, и вы хотите сохранить значение на сервере. Итак, это один из способов установить выбранное значение с сервера в счетчик.
Надеюсь, поможет! PS код есть в Kotlin!
источник
Поскольку мне нужно что-то, что также работает с локализацией , я пришел к этим двум методам:
Как видите, я также наткнулся на дополнительную сложность чувствительности к регистру между arrays.xml и
value
сравнением, с которым я сравниваю. Если у вас этого нет, приведенный выше метод может быть упрощен до чего-то вроде:return arrayValues.indexOf(value);
Статический вспомогательный метод
источник
Вы должны передать свой пользовательский адаптер с позицией, такой как REPEAT [position]. и это работает правильно.
источник