2011-10-06 17 views
4

ListView가 포함 된 활동이 있습니다. SimpleCursorAdapter를 사용하여 목록보기를 채 웁니다. 앱을 실행하면 수동으로 ListView에서 아래로 스크롤 할 수 있습니다 (예 : 10 번째 항목). 그런 다음 내 전화를 돌릴 때 - 이것은 Activity를 파괴하고 다시 작성하며 ListView는 예상대로 새로 작성됩니다.방향 변경 후 ListView가 스크롤 위치를 유지하게하는 원인은 무엇입니까?

그러나 회전 후 내 휴대폰에서 다시 만든 활동은 내 수동 스크롤 위치 (이 예제에서는 10 번째 행)에서 내 ListView를 여전히 보여줍니다. 나는 내 코드가 ListView.setSelection (int)을 호출하지 않는다고 확신하므로 ListView의 재 위치 지정을 유발하고있는 것은 무엇입니까?

이것은 매우 편리 할 것 같지만, 내가 원하는 것은 아닙니다. ListViews 비헤이비어의 일부입니까? 그렇다면 어떻게이 재 위치 설정을 중지/무시할 수 있습니까?

답변

0

ListActivity를 작업의 기본 클래스로 사용 했습니까? 그렇다면 onRestoreInstanceState를 대체하는 기능 일 가능성이 큽니다. 나는 간단한 활동으로부터 상속하려고 노력할 것이다. 좀 더 주제를 중심으로 읽기

+0

아니오, 방금 ListActivity가 아닌 표준 액티비티가 있습니다. – MickeyR

+0

그렇다면 Activity.onCreate 및/또는 Activity.onRestoreInstanceState에서 setSelection을 시도 할 것입니다. – slkorolev

+0

저는 여러분이 옳다고 생각합니다. ListView 상태는 onSaveInstanceState/onRestoreInstanceState에 의해 자동으로 설정됩니다. – MickeyR

4

....

보기 상태는 (내 ListView에 포함)이 자동으로 저장됩니다. 이것은 onSaveInstanceState()/onRestoreInstanceState()의 기본 구현에 의해 처리됩니다. 디버거를 사용하면 savedInstanceState에 ListView의 항목이 포함되어 있음을 알 수 있습니다. 자동으로 위치를 변경하는 것입니다. 내 활동에서 그 것을 막으려면 onSaveInstanceState()를 재정의 할 수 있습니다.

0

ListView은 같은 방법으로 화면 회전 후 상태 (스크롤 위치 포함)를 복원합니다. 예를 들어 EditText은 입력 한 텍스트를 그대로 유지합니다. 그것은 안드로이드 프레임 워크가 어떻게 설계되었는지입니다. xml 레이아웃 파일의 ListView에 대해 android:saveEnabled="false" 속성을 설정하여이 저장/복원 동작을 중지 할 수 있습니다. 또는 동일한 목적으로 ListView에서 setSaveEnabled(false) 방법으로 전화 할 수 있습니다.