Как сохранить отрисовку как значения, к которым можно получить доступ по ключу / имени

Я получаю список имен из базы данных и хочу назначить изображение каждому имени. Я обнаружил, что мы можем использовать int resID = getResources().getIdentifier(imgName , "drawable", getPackageName()); но есть несколько случаев, когда я должен назначить одно изображение для разных имен.

В приведенном выше коде вы можете получить идентификатор ресурса объекта рисования по его имени. Но я не хочу хранить одно и то же изображение под разными именами, а также не хочу использовать какие-либо массивы.

Есть ли способ получить ссылку на drawable по названию, которое мы ему присвоили?

То, что я пытаюсь сделать, это сохранить время выполнения как можно меньше.

1 ответ

Решение

Как указано в комментариях к вопросу и для следующих пользователей: я думаю, что лучшим решением является размещение соответствий в Hashtable.

Hashtable<String, Drawable> map=new Hashtable<>(SIZE);
//iterates for each couple key/name - drawable you need
map.put(KEY, drawable);
//then you can access to drawables easily with the name :
Drawable d=map.get(KEY);

Все затраты на хэш-таблицы связаны с модификацией данных: добавление элементов, обновление элементов (и я даже не уверен в их обновлении), удаление элементов. Поскольку ваш хэш, по-видимому, является фиксированным, буквально нет затрат (кроме использования памяти), и доступ почти [постоянный, не линейный по размеру] такой прямой, как если бы вы получили позицию в массиве.

Так что я думаю, что это решение, которое вам нужно. Вы можете иметь рисование с несколькими ключами, это не проблема. Тем не менее, один ключ всегда приводит к ОДНОМУ чертежу.

Помните, что map.put(); не дублирует значение (здесь можно нарисовать), за исключением, может быть, если это примитивные данные. Таким образом, любое изменение вашего рисунка (если произойдут некоторые изменения) будет применено ко всем ключам, имеющим одинаковый рисунок. Это может не быть проблемой, но вы должны знать, что если вы используете хеш-таблицу для других целей.

РЕДАКТИРОВАТЬ: так как вам нужна эта хеш-таблица для каждого вашего фрагмента, вам нужно создать абстрактный класс, от которого унаследует каждый ваш фрагмент, и объявить этот хеш-таблицу как защищенную в этом классе. Поэтому каждый подкласс сможет его получить. Вы также можете сделать эту хеш-таблицу приватной и реализовать функцию "Drawable getDrawableFromName(String name)", извлекающую рисуемое из hastable.

Я настоятельно рекомендую вам иметь абстрактный основной подкласс для ваших действий на тот случай, если вам понадобится сделать что-то подобное в действиях.

Другие вопросы по тегам