2014-12-11 5 views
1

에서 이미지 리소스/이름을 저장하기 : two.png one.png 및 :가 어떻게 시나리오가 환경 설정

한다고 가정을, 두 이미지이있다. 사용자는 이미지를 선택해야합니다. 이미지 이름 또는 리소스 ID환경 설정에 저장해야합니다. 나중에 사용자가 앱을 열면 마지막으로 선택한 이미지 사용자를로드합니다.

내 질문에 환경 설정에서 어떻게 저장합니까? 이미지의 리소스 ID를 올바르게 저장하고 있습니까? 앱이 설치되면 R.java 콘텐츠가 동일하게 유지됩니까? 난 그냥 drawables에 이미 있기 때문에 어디서나 비트 맵을 저장하고 싶지 않아.

내 개념을 명확히하도록 도와주십시오. 감사. 이 같은

+0

NAME을 (를) 저장할 수 없습니까? –

+1

"app가 설치되면 R.java 내용이 동일하게 유지됩니까?" 그 내용은 APK로 컴파일 된 후에 변경되지 않습니다. 그러나 앞으로 새 APK를 만들 코드를 수정할 때 각 변수에 할당 된 정수 ID가 잘 변경 될 수 있으므로 정수 ID를 저장하면 안됩니다. – Kai

+0

@ 카이 정보를 제공해 주셔서 감사합니다. 나는 이것을 위해 u +1을 줄 수 있었으면 좋겠다. – NightFury

답변

3

당신은

나중에 (귀하의 경우 한 개, 두 개)의 이름, 즉를 저장해야합니다, 당신은 이름

함으로써 자원의 ID를 얻을 수 있습니다
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

ID가 업데이트에서 절대로 변경되지 않는다는 것을 확인하십시오. 나는 확실하지 않을 것이다. – rekire

+0

앱이 컴파일 될 때마다 변경됩니다. 그래서 우리는 앱을 실행할 때마다 고정 문자열 식별자를 사용하여 동적으로 생성 된 ID를 검색합니다. –

+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); 
} 

목록이 유효한 ID를 가진 앱을 다시 실행 때마다 다시 채워 (그리고 아마도, 재 구축)한다 된대로 R.drawable 아이디 독립적 래퍼 ID를 생성,이 방법.

+0

답변을 주셔서 감사합니다. 그러나 이것은 내 상황에 맞지 않습니다. – NightFury

1

나는 마지막으로 이미지가 표시되는 힌트를 저장합니다. 나는 "img1"과 "img2"와 같은 것을 사용할 것이다. 그런 다음 onCreate의 다음 번에 올바른 이미지를로드합니다. 일반적으로 자원 ID 저장은 잘 작동하지만 새 이미지를 추가 및 제거하는 경우 ID가 변경 될 수 있습니다. 그러나 이것은 업데이트 후에 만 ​​발생할 수 있습니다.

당신의 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