2012-02-16 6 views
3

В моем приложении Android я загрузил некоторые изображения и данные из Интернета в расширяемый список. И я обработал изменения ориентации следующим образом.Ориентация экрана Android на Android?

@Override 
public Object onRetainNonConfigurationInstance() { 
    isOrentationChnged=true; 
    final Object data = arrGroupelements; 
    return data; 

} 

в моем OnCreate()

 if(!isOrentationChnged){ 
    new LongRunning().execute(); 

}else{ 

     if((String[][])getLastNonConfigurationInstance()==null){ 
     new LongRunning().execute(); 
     }else{ 
    arrGroupelements= (String[][]) getLastNonConfigurationInstance(); 
    expList.setAdapter(new ExpAdapter(cont)); 
     } 
} 

isOrentationChnged=false; 

LongRunning является AsynacTask, которые используются для получения данных из Интернета и загружает предварительно загружены данные после изменения ориентации (без получения новых данных из Интернета снова), но он очень медленный. Есть ли альтернативный способ сделать это эффективно?

+0

Вы видели [это] (http://developer.android.com/resources/articles/faster-screen-orientation-change.html)? – Ghost

+0

Да, я видел, что в соответствии с этим я использовал методы onRetainNonConfigurationInstance() и getLastNonConfigurationInstance(), как указано выше. Он работает нормально, но очень медленно, поэтому я должен знать альтернативу, чтобы сделать это эффективно. –

+0

is ** isOrentationChnged ** статическая переменная? Вы уверены, что LongRunning(). Execute() вызывается ** не ** при изменении ориентации? –

ответ

2

Наконец-то я получил простой способ ускорить изменение ориентации в деятельности.

IDEA:

Каждое изменение ориентации воссоздаст своей деятельности решение этой проблемы можно избежать рекреационной деятельности, добавив следующую строку кода в тег активности в файле манифеста приложения.

android:configChanges="orientation|keyboardHidden|screenSize" 
0

В соответствии с Давидом, если isOrentationChnged установлен в статическом состоянии, он всегда будет ложным, когда ваша активность будет воссоздана.

Вы на самом деле не нужно, что переменная в любом случае просто сделать это в OnCreate:

arrGroupelements = (String[][]) getLastNonConfigurationInstance(); 
if (null==arrGroupelements){ 
    new LongRunning().execute(); 
} else {  
    expList.setAdapter(new ExpAdapter(cont)); 
} 

Таким образом, если деятельность воссоздается будет использоваться ваши данные, в противном случае LongRunning операция будет выполняться.

Кстати, я не вижу, как вы используете элементы arrGroup в своем конструкторе адаптера.

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