2013-10-25 3 views
0

화면 방향이 바뀌면 응용 프로그램에서 블루투스 연결을 다시 설정하기를 원합니다. onRetainNonConfigurationInstance()로 저장하고 getLastNonConfigurationInstance()로 복원 할 수있는 BT 직렬 서비스 데이터 등을 저장하는 SavedState 객체가 있지만 화면의 방향이 바뀔 때 TextView 필드가 더 이상 업데이트되지 않습니다.onRetainNonConfigurationInstance()를 사용하면 TextViews가 사라집니다.

레이아웃을위한 두 개의 xml 파일이 있습니다. 하나는 레이아웃 포트에, 다른 하나는 레이아웃 랜드 폴더에 각각있는 것으로보기를 다시 포맷합니다. TextView ID는 두 XML 파일에서 동일하며 위치 만 변경됩니다.

재정의 된 onRetainNonConfigurationInstance()에 대한 호출을 주석 처리하면 TextViews가 다시 표시되지만 물론 더 이상 BT 장치에 자동으로 다시 연결할 수 없습니다.

onDestroy()를 호출하면 BT 서비스가 중지되므로 화면이 변경 될 때마다 BT 서비스가 다시 설정되어야합니다.

onRestoreInstanceState() 및 onSaveInstanceState()에 대한 재정의 된 호출이 효과가없는 것처럼 보입니다.

누구나 올바른 방향으로 나를 가리킬 수 있습니까? 사라지는 뷰는 영구적입니다. 즉, 한 방향에서 다시 변경하면 TextView가 복원되지 않습니다.

+0

onRetainNonConfigurationInstance (및 가져 오기)를 사용하지 마십시오. 그들은 더 이상 사용되지 않습니다. –

+0

하나의 활동 또는 단편을 사용하고 있습니까? –

+0

그리고 ... 일부 ACtivity (또는 조각) 코드를 게시하십시오. –

답변

0

장치 방향이 변경되면보기가 화면에서 벗어나서 다시 표시되지 않고 다시 만들어집니다. 해당 활동에서도 마찬가지입니다. 현재 보이지 않는보기 및 활동은 더 이상 참조되지 않을 때만 가비지 수집됩니다. 텍스트 뷰의 텍스트는 뷰가 고유 한 ID를 갖는 경우 시스템에 보존됩니다. 보기가 다시 작성된다는 사실은 findViewById()을 다시 수행해야한다는 것을 의미합니다.

이제 MVC 관점에서 Activity컨트롤러입니다. 귀하의 블루투스 연결은 확실히 모델의 일부입니다 (방향 변경시 살아남 아야합니다). 따라서 블루투스 관련 데이터를 Activity에 보관하지 마십시오. 예를 들어 정적 변수 또는 Application 하위 클래스의 필드를 사용할 수도 있고 다른 적절한 필드를 사용할 수도 있습니다. MVC 보기에 관해서는으로, XML을 통해 지정합니다. 원칙적으로 MyCustomButton과 같은 사용자 정의 클래스를 정의 할 수 있지만 일반적으로 기존 항목을 재사용하면됩니다.

관련 문제