2016-10-21 8 views
0

나는 고칠 수있는 문제에 직면하고 있습니다. 내 Android 앱에서 일반적인 방법 (Snackbar.make().show())을 사용하여 스낵바를 표시합니다. 그러나 구성 변경 (예 : 세로에서 가로로 방향 변경)도 처리해야합니다.Snackbar에서 구성 변경을 처리하는 방법은 무엇입니까?

이제 구성이 변경되면 스낵바가 사라집니다. 이는 내가 기대하지 않는 것입니다. 나는 ProgressDialog와 AlertDialog에서 같은 문제를 겪었다. DialogFragment의 사용자 정의 하위 클래스를 사용하여 해결했다.

또한이 AsyncTasks 문제는 내가 보유한 Fragment의 사용자 지정 하위 클래스 (setRetainInstance(true), 조각 번호 onCreate())를 사용하여 해결했으며 내 AsyncTask에 대한 참조를 유지합니다. 두 경우 모두 각 Fragment에는 Activity가 구현해야하는 콜백 인터페이스가 있으며 onAttach()/onDetach() 동안 콜백을 설정/해제합니다.

그러나 Snackbar는 예를 들어 ProgressDialog (예 : getDialog() : 내 DialogFragment의 새 ProgressDialog(getActivity()))와 같은 컨텍스트 대신보기에 연결되어 있기 때문에 다른 것으로 보입니다.

그래서 구성 변경 후 언제 어떻게 스낵바를 표시해야합니까? 프래그먼트를 사용하고 있습니까? 또는 savedInstanceState을 통해 저장/복원하는 활동에 개인 변수를 추가하여이 문제를 해결해야합니까? 더 적절한 대답이 제공되지 나는 마감 시간을 충족 한 이후

답변

0

, 나는 이제 다음 솔루션을했다 :

  • 가하고있는 모든 내 된 활동에 상속 AppCompatAcitity를 확장하는 activiy 기본 클래스를 생성
  • 액티비티 기본 클래스에서 스낵바에 대한 정보를 저장할 인스턴스 변수를 만듭니다 (isShowing, 식별자, 메시지, 액션, 인수)
  • 액티비티 기본 클래스에서 스낵바를 표시하는 메소드를 생성하여 모든 앞서 언급 한 변수들
  • 활동 기본 클래스에서 onSaveInstanceState 및 onRestoreInstanceState를 사용하여 위에서 언급 한 변수를 저장/복원하십시오.
  • 구성 변경 전에 스낵바가 표시되면 부울이 저장되고 복원되어 새로운 스낵바를 만들 수 있습니다 내 활동 기본 클래스의 onRestore()와 동일한 구성으로
  • 스낵바를 만들 때 snackbar.setCallback()을 사용하여 스낵바가 닫혔는지 확인하는 콜백을 설정하고, 그렇다면 isShowing을 false
  • 스낵바를 설정할 때 이전에 인수로 제공 한 식별자를 사용하여 내 Snackbar가 클릭되었는지 확인하는 내 activiy 기본 클래스에서 메서드를 호출하는 작업을 설정합니다.