2013-04-24 4 views
7

Я разрабатываю приложение, где мне нужно отображать предложения в ListView и при изменении ориентации я хочу, чтобы этот список был скрыт. Но он все равно появляется на экране. Я пробовал это: 1) Получите адаптер списка и очистите его. 2) Установите видимость GONE перед изменением ориентации (но он снова станет видимым после onCreate) 3) Установите видимость GONE в onCreate, но список все еще отображается на экране (я думаю, что, возможно, андроид сохраняет старый список, потому что я инициализирую просмотр списка снова, и он выглядит пустым, но список на экране отсутствует). Итак, как я могу избавиться от списка?Как не сохранять состояние просмотра в Android?

+3

посмотрите на [ 'View.setSaveEnabled (булевой Enab led) '] (http://developer.android.com/reference/android/view/View.html#setSaveEnabled (boolean)) метод –

ответ

13

Вместо того, чтобы использовать что-то глобальное, как андроид: configChanges, которые влияют на все виды в деятельности, какие об использовании метода setSaveEnabled (boolean) или эквивалентный атрибут xml android: saveEnabled?

Управляет включением сохранения состояния этого представления (то есть, будет ли вызываться метод onSaveInstanceState()).

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

Вы можете, например, поместить его в файл макета:

<ListView 
    .... 
    android:visibility="invisible" 
    android:saveEnabled="false"> 
</ListView> 

, а затем установить видимость VISIBLE при запуске печати. Или, если вы предпочитаете использовать видимость и метод setSaveEnabled в методе onCreate.

Я пробовал с помощью простого ListView и кнопки, которая меняет видимость на true. На вращения ListView стал invisibile (его состояние по умолчанию)

отметить также, что:

Этот флаг можно только отключить сохранение этой точки зрения; все дочерние представления могут сохранять свое состояние.

так что вы должны очистить список во время OnStop() или любой другой метод, который вы хотите, но если даже если вы этого не сделаете, ListView еще будет невидим на вращение

Источник:

1
@Override 
protected void onSaveInstanceState(Bundle outState) { 
} 

переопределить эту функцию в свою деятельность и не называть метод «супер»!

или указать ориентацию в манифесте:

<activity 
    android:name="com.blabla" 
    android:configChanges="keyboardHidden|orientation|screenSize" 
    android:screenOrientation="portrait" > 
</activity> 
1

Android система вызывает метод OnCreate() вашего actiivty об изменении ориентации устройства. Добавить configchanges к записи активности в манифесте, если вы не хотите, чтобы создать свою активность снова на изменение ориентации

<activity 
     android:name=".MyActivity" 
     android:configChanges="keyboardHidden|orientation" 
     />