Обработка на промени в ориентацията на екрана

Моето приложение функционира по следния начин: imageView, който може да се вижда в портретна или пейзажна ориентация, и потребителят може да плъзга между изображенията, за да промени изображението в imageView. Проблемът е, че ако плъзнете, за да изберете различно изображение и след това завъртите устройството в пейзажен режим, то показва оригиналното изображение, избрано от потребителя, а не текущото изображение, което се показва в imageView. Чудя се как мога да получа идентификатора на текущото изображение, преди да бъде завъртяно, и след това да го задам, когато е в пейзаж. Ще бъде ли в метода onPause или има метод onConfigurationChanged, който мога да използвам за това?


person ez4nick    schedule 05.01.2014    source източник


Отговори (2)


Вижте тук: http://developer.android.com/training/basics/activity-lifecycle/recreating.html

Според документацията дейността се унищожава при смяна на ориентацията. За да запазите допълнителна информация за състоянието в такова събитие, можете да замените метода onSaveInstanceState() и да добавите двойки ключ-стойност към обекта на пакета, като така:

public void onSaveInstanceState(Bundle savedInstanceState){
    savedInstanceState.putInt("CurrentImageId", [current image id here]);
    super.onSaveInstanceState(Bundle savedInstanceState);
}

След това, когато приложението бъде възстановено след промяната на ориентацията, можете да извлечете идентификатора на текущото изображение, като замените метода onCreate(Bundle savedInstanceState) или onRestoreInstanceState(Bundle savedInstanceState):

public void onRestoreInstanceState(Bundle savedInstanceState) {
    super.onRestoreInstanceState(savedInstanceState);

    int currentImageId = savedInstanceState.getInt("CurrentImageId");
    //Set the current image here, after retrieving the id
}

Разбира се, не знам как точно идентифицирате вашите изображения, така че не мога да ви кажа как точно да зададете/извлечете идентификатора на текущото изображение.

person Quercus    schedule 05.01.2014
comment
Разбирам логиката, сега ми е трудно да получа препратката за изтегляне от imageView. Опитах се да използвам imageView.getId(), но това върна 0. Има ли функция за получаване на идентификатора с възможност за изтегляне от imageView? Надявам се да получа нещо като R.drawable.imageX - person ez4nick; 06.01.2014
comment
използването на getDrawable води до това: putInt (String,int) в Bundle не може да се приложи към (String, android.graphics.drawable.Drawable) - person ez4nick; 06.01.2014
comment
Да, не можете лесно да получите идентификатора на теглене след факта. Вместо това се опитайте да следите кой чертеж се показва в момента, като съхраните препратка към него в момента, в който е зададен чертежът. РЕДАКТИРАНЕ: Изображенията, които показвате, в папката с ресурси за рисуване ли са или са файлове? Ако не са в папката с ресурси за рисуване, те няма да имат типа ID, който търсите. Ако например са файлове, опитайте да съхраните името на пътя. - person Quercus; 06.01.2014
comment
Изображенията са в папката с ресурси за рисуване. Мисля, че го разбрах, но имам още 1 объркваща част, след завъртане към пейзаж и след това обратно към портрет, под какъв метод ще бъде това? Изглежда, че завъртането към пейзаж и след това обратно към портрет все още се връща към оригиналното изображение, въпреки че е било на правилното изображение след първата промяна на ориентацията - person ez4nick; 06.01.2014
comment
Хм, искаш да кажеш, че сега работи при първата промяна на ориентацията, но не и при следващата? Това е много странно. Не съм сигурен защо това би било така... - person Quercus; 06.01.2014
comment
Да, и аз не съм сигурен защо е така. Ще трябва да видя дали има по-добър начин да постигна това - person ez4nick; 06.01.2014

Опитайте да добавите android:configChanges="orientation" под <activity> във вашия AndroidManifest.xml

person marson    schedule 05.01.2014
comment
Опитах това и не се получи, пак се връща към избраното оригинално изображение - person ez4nick; 06.01.2014