2013-03-20 3 views
18

setContentView(R.layout.main)을 사용하여 동일한 활동의보기를 전환합니다. 일부 비동기 작업을 호출하고 주 레이아웃 파일에서 데이터를 채우는 중이므로 setContentView(R.layout.main) 메서드를 호출하여 뷰를 변경하고 있습니다.동일한 활동의 ​​레이아웃 파일 변경

나는 동일한 활동에 대해 setContentView 메서드를 여러 번 사용하면 안된다는 것을 알게되었습니다. 그것은 나를 위해 잘 작동하지만.

동일한 활동으로보기를 변경하려면 setContentView 방법을 여러 번 사용하면 안되는 이유를 설명 할 수있는 사람이 있습니까?

메모리 관련 예외가 발생합니까? 누군가 명확히 해 주실 수 있습니까?

+0

예외는 예외로 간주됩니다. (Sys 메모리가 부족할 때 OutOfMemory Exception을 수행하는 경우는 예외입니다.) 다른 사람들의 의견을 들어 봅시다. – Calvin

+0

Related : http://stackoverflow.com/q/6811989/783284 – Cody

답변

2

안드로이드 플랫폼은 이미보기 사이의 전환을 처리하고 활동과 관련된 각보기의 상태를 유지하는 강력한 프레임 워크를 가지고 있기 때문에 전환보기는 좋은 생각이 아닙니다. 대신 기존 프레임 워크를 계속 사용하는 것이 좋습니다. 이 모든 일을하기 위해 거쳐야하는 복잡한 구현을 생각해보십시오. 애플리케이션에서 이러한 사항을주의 깊게 다루지 않아도되고 전체 애플리케이션에 2 ~ 3 개의 화면 만있는 경우에만보기를 전환 해 볼 수 있습니다. 복잡한 논리와 많은 양의 데이터가 필요한 경우 이러한 뷰를 구성하는 방법에 기반하여조차도 이러한 뷰를 생성하는 데 좋은 방법이 될 수 없습니다. 뷰를 추가하는 경우에는 애플리케이션에 기능 활동에 의해 처리 될 필요가 높을 것입니다. 이 경우 특정 Activity 내의 모든 뷰를 선언하고 초기화하여 모든 뷰 인스턴스를 유지 관리해야합니다. 만약 당신이 Activty와 Task에 대해 더 알고 싶다면 refer this link

+3

즉,보기를 변경하면 논리가 변경되어 새로운 활동이 더 적합하다는 것을 의미합니다. – adrianp

+0

내가 이전보기에 할당 된 메모리가 해제되거나 할당되지 않을 것입니다보기를 변경 한 후 알고 싶습니다. 그리고이 한 가지 더 많은 메모리 예외가 발생할 수 있습니다. 당신은이 두 가지 문제점에 대해 명확히 할 수 있습니다. 왜냐하면 나는 setContentView 메소드를 사용하여 변경하고 있습니다. 조회수. –

+0

메모리 예외가 발생합니까? – Neil

0

언제나 setContentView()를 호출 할 때마다 나는 당신이 할 수 있다고 생각하는 것 외에 모든 레이아웃을 다시 찾아야 할 것이다. 그러나 논의 된 바와 같이 here 이것은 입니다.은 분명히 안드로이드 지침을 위반하는 것으로 알려져 있습니다. 또한 Commonsware는 매우 중요한 포인트를 가지고 있습니다. here 안드로이드가 일반적으로 당신을 위해 처리 할 당신의 견해 등을 정리하는 것을 잊어 버렸을 때 당신이 누설 메모리에 걸리기 쉽다는 것이 가장 중요한 것 중 하나입니다.

요컨대 Android 가이드 라인을 따라 Fragments을 사용하거나 새로운 Activity을 시작해야합니다.

0

developer docs 된 setContentView 상기 (layoutResID를 INT) 레이아웃 자원으로부터 활성 컨텐츠를 설정

에 사용된다. 모든 최상위 레벨보기를 활동에 추가하여 자원이 비정상적으로 확장됩니다.

가장 좋은 방법은이 방법을 시작시 Activity 레이아웃을 팽창시키는 것입니다. 이 방법을 계속 사용하면 나중에 문제가 발생할 수 있다는 의미는 아닙니다. 당신의 활동에 this 질문

된 setContentView에 대답을 인용하는 것은 실제로 그 자체가 바로 레이아웃을 팽창보다 더 많은 작업을 수행 활동에서 사용하는 창에 된 setContentView를 호출합니다.

난 당신이 FragmentsViewPager 또는 다른 탭 이동 방법 그러나 결국 모든 것이 당신이 원하는 무엇을 내려 오는을 사용하여 같은 레이아웃을 전환 할 수있는 다른 방법을 찾는 것이 좋습니다.

This 질문은 당신이 찾고있는 것을 줄 수도 있습니다.

관련 문제