마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

[안드로이드] 화면전환의 문제점...ㅠㅠㅠ 도와주세요

0 추천

화면전환에 문제점이 있는데, 

저는 이렇게 추측하고 있습니다. 뭐가 문제인지 어떻게 고쳐야하는지 알려주세요 .

감사합니다.

-------------------------------------

리스트뷰와 그리드뷰가 구성되어있는 프래그먼트1이 있다.
이 프래그먼트 말고도 다른 여러개의 프래그먼트들이 있으며 그들을 감싸고있는 프래그먼트2가 있다.
감싸고 있는 프래그먼트2의 하는 일은 여러 프래그먼트들을 화면에 체인지하면서 보여주도록 되어있다.
프래그먼트1에 프래그먼트2의 리스트와 그리드뷰를 체인지 할 수 있도록 하는 버튼이 하단에 위치해있다.
프래그먼트2에 넣어야 할것같지만 프래그먼트1에 넣은 이유는,
프래그먼트들이 Swipe로 체인지 되는 구조인데, 하단의 버튼이 프래그먼트1에 있다면 
프래그먼트1 화면이 Swipe 될때 프래그먼트1 화면이 움직임에 따라서 같이 움직이기 때문이다.
그래서 감싸고있는 프래그먼트2에 넣었다.
 
프래그먼트2의 하단에 리스트뷰,그리드뷰 선택할 수 있는 버튼 중에 하나를 클릭하면,
기존의 프래그먼트1의 인스턴스객체를 사용하여 프래그먼트1 안에 존재하는 메소드인 changeView();를 실행하였다.
changeView();는 리스트뷰, 그리드뷰를 전환하는 메소드이다.
 
그런데 여기서 문제는,
화면이 센서에 의해 가로,세로 모드로 변경이 되는데, 
세로 모드로 보다가 가로모드로 변경하면 onDestroy가 되고 onCreate가 된다.
onDestroy, onCreate가 되면서 기존에 생성했던 인스턴스객체가 날아가는것 같다.
여기서 하단의 리스트,그리드뷰를 체인지하는 버튼을 누르면 새로 인스턴스객체를 생성하면서 changeView();를 호출하는 것 같다.
기 생성된 인스턴스 객체가 아닌, 새로 인스턴스 객체를 생성하면  listView gridView의 아이디를 찾을수 없다(NullPointExeption에러가 난다.)
 
슈퍼꽃붕어 (1,600 포인트) 님이 2015년 5월 21일 질문
확인해봤는데 인스턴스잃어버리는 문제가 아니네요!!! 인스턴스는 기존인스턴스를 사용하여 changeView();를 호출하는데 왜 nullPoint에러가날까요 ㅠㅠ

1개의 답변

0 추천
onConfigurationChanged 검색하셔서 참고하세요.

근데 Fragment2로 여러가지 프레그먼트를 감싸지 말고

그냥 FragmentActivity에 Fragment가 들어갈 View하나 놓고 거기서 Fragment만 체인지 해주면 되지 않나요?

물론 Fragment2에 있던 체인지에 사용하던 버튼은 FragmentActivity에 있어야겠죠.

FragmentActivity에서도 충분히 자신의 View안에 있는 Fragment들에 관여할 수 있는데 굳이 Fragment2를 두어서

다른 Fragment에 관여하는게 좀 이상하네요.

제가 잘못 이해했다면 그냥 오지랖이라 생각해 주세요~
작전동 (5,890 포인트) 님이 2015년 5월 21일 답변
감사합니다! 매니페스트에 configChanges 추가해서 해결했어요 ~
저도 왜 FragmentActivity 안에 Fragment가 또 있어야 하는지 이해가 잘 안가는데요 ㅠㅠ 구글에서 재공하는 sample프로젝트 중에 SlidingTabBasic이라는 소스 보고 따라했어요 ~
...