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

listview 내용 유지

0 추천
listview에 입력값을 추가하고 추가된 listview를 누르게 되면 다음 activity화면으로 넘어가는 앱을 만드는 중입니다. 하지만 다음 activity에서 intent를 이용하여 전 activity로 돌아오게 되면 추가해놓은 listview의 목록이 사라지는 현상이 발생합니다ㅠㅠ

어떤 코드를 추가로 작성해야지 listview 목록을 유지할 수 있나요? 감사합니당

혹시 추가로 listview의 목록을 클릭하게 되면 각각의 listview 목록에 따라 새로운 secondactivity화면이 나오도록 하는 방법도 알 수 있을까요?
appdeveloper (120 포인트) 님이 2020년 12월 4일 질문

4개의 답변

0 추천
라이프 사이클 관련된 것으로 보이네요. 아마 첫번째 화면에서 데이터 입력한 것을 별도의 저장소에 저장하지 않으시는가 보네요. 메모리, 파일, 또는 데이터베이스 등에 작업내용을 저장하세요. 그리고 다른 액티비티에서 돌아올 때 여기에서 데이터를 읽어서 보여주세요. 이 데이터 저장소를 다음 스크린과 공유를 하면 다음 스크린에서도 같은 데이터를 화면에 보여줄 수 있겠죠.

저장할 데이터가 많다면 Room은 데이터베이스 라이브러리를 사용하시는 게 좋을 것이고, 그리 크지 않다면 SharedPreferences나 파일에 데이터를 저장할 수 있습니다. 데이터가 보안에 민감한 것이라면 반드시 암호화 해서 저장하셔야 하구요. 그리고 이것도 필요없다면, 메모리를 데이터를 저장한 후 공유하셔도 됩니다.

님이 선택하시는 옵션에 따라 공부하실 내용과 구현방법이 많이 달라지겠죠. 그리고 데이터를 공유하는 저장소 오브젝트는 abstract을 하셔서 메모리든, 파일이든, 데이터베이스든 어떤 저장소를 사용하는가 상관없이 같은 인터페이스를 통해 동작할 수 있도록 하신다음, 아주 유연한 코드가 될 겁니다.

보통 데이터 저장을 하는 역할을 담당하는 오브젝은 singleton 패턴을 많이 사용합니다. 애플리케이션 글로벌하게 하나의 오브젝만 사용하는 겁니다. 그래야 같은 데이터를 여기 저기서 공유하기가 쉬울 거고, 매번 오브젝트를 생성하는데 드는 비용도 줄일 수 있기 때문이죠.

최적의 옵션을 선택하시길 바랄게요.
spark (227,470 포인트) 님이 2020년 12월 4일 답변
0 추천
윗 분 말씀대로 라이프사이클 관련 질문이시네요.

 

FLAG에 대해서 공부하시면 좋을 것 같습니다. 저도 수준이 떨어져서 명확하게 어떤게 좋다고 말씀드리긴 어려운데 약간 편법? 에 대해 공유해드릴까 합니다.

manifest에서 유지하고 싶은 activity를 android:launchMode="singleInstance"로 설정하시고
유지하고 싶은 액티비티로 돌아가실때 intent.setFlags(FLAG_ACTIVITY_CLEAR_TOP); 로 설정해서 start intent하시면 원하시는 결과를 얻을 수 있을 겁니다. 물론 이전에 다른 액티비티로 넘어가실때 유지하시는 액티비티를 종료하지 않는다는게 전제가 되어야하겠지만요.

 

저 FLAG는 스택아래 있는 activity를 그대로 맨 위로 올리는 거라서 저장하지 않고 그냥 그대로 불러오는 꼼수입니다. 만약에 액티비티사이의 이동이 복잡하면 쓰기 좀 곤란하실수도 있습니다.

 

본격적으로 라이프사이클 공부하시길 추천드립니다.
Ed (180 포인트) 님이 2020년 12월 11일 답변
0 추천
ListView에 항목이 있고,
해당 Item을 클릭하면 보통 상세 페이지가 뜨죠.
그곳에서 수정이나 삭제를 할 수도 있고,
댓글이나 좋아요를 할 수도 있습니다.

아무것도 하지 않는다고해도,
이전 화면으로 돌아가는게, 몇시간 후일 수도 있고, 심지어는 글을 읽고 바로 상위로 가도
Refresh가 되는게 기본이라고 생각합니다.

따라서 onBackPressed로 돌아가면, 조회를 다시 하는게 기본일 것 같습니다.
만약에 Refresh를 10분마다 하겠다고 한다면, 10분이 안되었을 때는 다시 할 필요는 없겠죠.

그러나 기획에 그런 내용이 없다면, 재조회는 기본이 되어야 한다고 생각합니다.

어떤 기획이나 필요에 의해서 그렇게 개발이 되어야 한다면,
ViewModel을 고려해 보세요.

앱에서 표현되는 데이터는 많은 요소가 Static 합니다.
예를들어 화면에 있는 정보성 텍스트와 이미지(아이콘을 포함한) 들은
우리가 통신할 필요가 없는 것들이 많이 있습니다.
그런 것은 xml에 있거나, 동적인 요소는 Activity에서 다룹니다.

반면, 서버나 DB에서 데이터를 가져와 화면에 뿌려줘야 하는 것은,
layout과 viewmodel 만으로도 처리가 가능합니다.

Android ViewModel으로 검색하면 수많은 강좌들이 있을 겁니다~
Will Kim (43,170 포인트) 님이 2020년 12월 14일 답변
0 추천
A(listview) -> B 이렇게 갔는데 다시 A로 돌아오는데 intent를 호출해서 돌아오시나요?

A의 액티비티가 SingleTask가 아니라면 당연히 리스트가 초기화될겁니다.

onCreate를 호출하게 될것이니까요.

B에서 다시 리스트가 있는 A로 돌아올때는 intent로 호출하는게 아니고 finish()로 현재 엑티비티를 닫고 복귀하는 개념으로 생각하셔야합니다..
코코아드래곤 (280 포인트) 님이 2020년 12월 16일 답변
...