2017-12-19 32 views
0

ImageSwitcher가 화면을 회전 할 때 표시되는 ImageResource를 변경하지 못하게하는 간단한 해결책을 찾을 수 없습니다. onSaveInstanceState() 및 onRestoreInstanceState()에서 여러 가지를 작성하려고 시도했지만 작동하는 항목을 찾을 수 없습니다.화면을 회전 할 때 ImageSwitcher에서 ImageResource를 저장하는 방법

나는 이런 식으로 뭔가 ( 순수한 의사 코드) 달성 할 수있는 방법

:

@Override 
public void onSaveInstanceState(Bundle savedInstanceState) { 

    // Save UI state changes to the savedInstanceState. 
    // This bundle will be passed to onCreate if the process is 
    // killed and restarted. 
    int picNum = imageSwitcher.getImageResource(); 

    savedInstanceState.putInt("picNum", picNum); 
    // etc. 

    super.onSaveInstanceState(savedInstanceState); 
} 

@Override 
public void onRestoreInstanceState(Bundle savedInstanceState) { 

    super.onRestoreInstanceState(savedInstanceState); 

    // Restore UI state from the savedInstanceState. 
    // This bundle has also been passed to onCreate. 
    Int picNum = savedInstanceState.getString("picNum"); 
    imageSwitcher.setImageResource(picNum); 
} 

내가 정확하게 표시되는 이미지의 이름을 모르는를, 그래서 매번 (매번 ImageSwitcher 표시를 찾을 수있다 "raw"폴더의 무작위 이미지).

내가 INT []에에 그 I로 잔유를 저장 :

rawClass = R.raw.class; 

fields = rawClass.getFields(); 

rand = new Random(); 

rndInt = rand.nextInt(fields.length); 

resID = fields[rndInt].getInt(rawClass); 

imageSwitcher.setImageResource(resID); 

내가 해결 방법을 찾을

답변

0

사전에 감사합니다 : 내가 사용하고 코드의 단순화 된 버전이있다

@Override 
public void onSaveInstanceState(Bundle savedInstanceState) { 

    // Save UI state changes to the savedInstanceState. 
    int randInteger = rndInt; 
    int[] saveArray = imgArr; 
    int picNum = imgArr[currentPhoto]; 

    savedInstanceState.putInt("picNum", picNum); 
    savedInstanceState.putInt("randInteger", randInteger); 
    savedInstanceState.putIntArray("picArr", saveArray); 
    // etc. 

    super.onSaveInstanceState(savedInstanceState); 
} 

@Override 
public void onRestoreInstanceState(Bundle savedInstanceState) { 

    super.onRestoreInstanceState(savedInstanceState); 

    // Restore UI state from the savedInstanceState. 
    // This bundle has also been passed to onCreate. 
    int[] picArr = savedInstanceState.getIntArray("picArr"); 
    int picNum = savedInstanceState.getInt("picNum"); 
    imgArr = picArr; 
    imageSwitcher.setImageResource(picNum); 
} 
:() 메소드 나는 saveonSaveInstanceState도 사용할 수 있어요 그 후 그것을 switcherImageView.setImageResource(imgArr[currentPhoto]);

를 호출 할 수 있습니다

이제 화면을 모두 회전해도 ImageSlider에서 같은 그림을 볼 수 있습니다. 그러나 다시 클릭하면 어떤 색인인지는 중요하지 않습니다. 화면의 맨 처음부터 시작됩니다. 배열 imgArr[0].

편집 최종 솔루션을 찾았습니다! :) 나는 분명히 인덱스를 저장했다 : DOH! :

그래서 내가 쓴 : onSaveInstanceState에서 int currentPhoto= indexNumber; savedInstanceState.putInt("currentPhoto", currentPhoto);을() 메소드 및 OnRestoreIntanceState에서
int photoCurrent = savedInstanceState.getInt("currentPhoto"); 

() 메소드.

모든 것이 이제 작동합니다!