2014-12-11 7 views
1

У меня есть сценарий:Как хранить ресурс изображения/имя в настройках

Предположим, что есть два изображения: one.png и two.png. Пользователь должен будет выбрать изображение, мне нужно сохранить изображение изображения или Идентификатор ресурса в предпочтения. Позже, когда пользователь откроет приложение, я загружу пользователя изображения, выбранного в последний раз.

Итак, мой вопрос: как я собираюсь сохранить его в настройках? Является ли сохранение идентификатора ресурса для правильного изображения? Сохраняется ли содержимое R.java при установке приложения? Я просто не хочу сохранять растровое изображение в любом месте, поскольку оно уже присутствует в drawables.

Пожалуйста, помогите мне очистить мою концепцию. Благодарю.

+0

Не можете ли вы сохранить NAME? –

+1

«Сохраняется ли содержимое R.java при установке приложения?» Его содержимое не изменяется после его компиляции в APK. ОДНАКО, идентификатор целого числа, присвоенный каждой переменной, может измениться при изменении кода для создания нового APK в будущем, так что вы не должны хранить целочисленный идентификатор. – Kai

+0

@Kai Спасибо за информацию. Хотел бы я дать u +1 для этого :) – NightFury

ответ

3

Вы должны сохранить имя, то есть (один, два в вашем случае)

Позже, вы можете получить идентификаторы ресурсов по имени

String imageNameFromPreferences= getLastUsedImageFromPref(); 
//get resource id by name 
final int resourceIdOfLastUsedImage = resources.getIdentifier(imageNameFromPreferences, "drawable", 
    context.getPackageName()); 
//use this id to set the image anywhere 
imageView.setBackgroundResource(resourceIdOfLastUsedImage) 
+0

Уверен, что идентификатор никогда не изменится при обновлении? Я не буду уверен. – rekire

+0

Он будет меняться каждый раз, когда приложение компилируется. Вот почему мы извлекаем динамически сгенерированный идентификатор с использованием фиксированного идентификатора строки при каждом запуске приложения. –

+0

Спасибо. Это техника, которую я искал. – NightFury

0

ли что-то вроде этого:

public List<Integer> myImagesList; 

public void createMyImagesList{ 
    //Here put all the image ids you need into the list 
    myImagesList.put(R.id.one); 
    myImagesList.put(R.id.two); 
} 

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

public Integer obtainUserSelectedImage(int theIdStoredInPrefs){ 
    return myImageList.get(theIdStoredInPrefs); 
} 

Таким образом, вы создаете обертку идентификатор, независимый от R.drawable ид, как список будет заселен с идентификаторами каждый раз, когда приложение повторно запустить (и, возможно, перестроена).

+0

Спасибо за ответ, но это не устраивает мою ситуацию. – NightFury

1

Я бы просто сохранил подсказку, изображение которой было отображено в последний раз. Я бы использовал что-то вроде «img1» и «img2». Затем в следующий раз в onCreate загрузите правильное изображение. Как правило, сохранение идентификатора ресурса должно работать нормально, но если вы добавляете и удаляете новые изображения, возможно, что идентификаторы меняются. Однако это может произойти только после обновления.

Попробуйте этот код в методе onCreate:

SharedPreferences prefs = context.getSharedPreferences(BuildConfig.APPLICATION_ID + "_preferences", Context.MODE_PRIVATE); 
String lastImg = settings.getString("image"); 
if("img1".equals(lastImg) { 
    imageView.setDrawable(R.drawable.img1); 
} else if("img2".equals(lastImg) { 
    imageView.setDrawable(R.drawable.img2); 
} 
+0

Спасибо за ваш ответ. Но это сделает мое приложение очень сложным для обработки, так как оно имеет тонны изображений. – NightFury

 Смежные вопросы

  • Нет связанных вопросов^_^