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

화면 인텐트 질문이요!

0 추천

안드로이드 공부한지 이제 한 달이라서요 ㅠㅠ..

mainActivity에서  Button btn = new Button(); 이런식으로 동적으로 생성된 버튼까지 전부 똑같은 화면으로

두번째 생성한 Activity에 옮기고 싶은데... 동적으로 생성된 버튼들은 어떻게 옮겨야 하나요??

qqwe7789 (160 포인트) 님이 2021년 5월 26일 질문

1개의 답변

0 추천
클래스를 별도로 만들어서 재사용하세요. 커스텀 뷰를 쓰셔도 되고 컴포넌트를 생성하는 코드부분이 담긴 부분을 재사용하셔도 되구요. 이 클래스를 다른 액티비티에서 가져다 쓰면 되겠죠? 한번 시도해 보시고 잘 안되시면 기본적인 코드를 보여드릴게요.
spark (226,720 포인트) 님이 2021년 5월 27일 답변
아 답변 감사합니다 !
아 제가 궁금했던건 버튼생성이라는 버튼을 누르면 동적으로 버튼이 생성되게끔 하고 버튼이 생성되면 그 화면 그대로 두번째 클래스의 인텐트로 넘기고 싶은데...
동적으로 생성된 버튼은 안옮겨지고 버튼을 생성하는 버튼만 넘어가져서요 ㅠㅠ
안드로이드에서 액티비티 간에 데이터를 넘기려면 Serializable 또는 Parcelable 인터페이스를 구현해야 합니다. 이유는 화면 로테이션 같은 Configuration Change라고 불리는 이벤트가 발생할 때 가지고 있던 데이터를 유지해주기 위해 필요한 데이터 타입입니다.
근데 Button은 이 클래스를 구현하고 있지는 않은 것 같네요. 그러면 화면간 전달해서 사용하시면 안됩니다. 되는 것 같아도 아까 말씀드린 Configuration Change 등에 대한 처리방법이 없어요. 따라서 화면간 전달해야할 데이터나 로직을 별도로 빼서서 이걸 가져다 재사용하세요.
생성된 버튼들을 다른 화면에서 가져다 쓰고 싶다면 이걸 직접  파일이나 메모리에 Serialize하고 Deserialize하도록 구현해 주셔야 합니다. 그리고 serialization의 정의가 object의 state 를 저장하는 건데, button의 listener같은 동작을 어떻게 처리할지 좀 애매하네요.
안드로이드가 button과 같은 뷰를 onStop 같은 데서 저장했다가 다시 복구하는데, 이 부분을 확인해 보면 힌트를 얻을 수도 있을 것 같네요.
어쨋든 간단하게 해결할 수 있는 방법을 떠오르지가 않네요.
...