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

안드로이드 xml파일 하나로 여러 화면 보여주기

0 추천

완전 초보 개발 꿈나무입니다.

앱을 만드는 중에 질문이 생겨서 여쭤봅니다.

제가 원하는 화면입니다.

XML1 화면에 각각의 버튼이 있고, XML2라는 텍스트 뷰가 2개있는 화면이 있습니다.

XML1 화면에서 버튼 1을 눌렀을 때와, 2를 눌렀을 때 XML2에서의 텍스트 뷰 값이 각각 다르게 띄우고 싶습니다.

각 버튼 별 XML파일을 만들어줘도 되지만, 그렇게 할 경우 버튼이 많아짐에 따라 XML파일이 너무 많아질것같아서 뷰의 데이터 값만 바꾸는게 효과적이지 않을까 해서 질문드립니다.

이럴 땐 어떤 식으로 만드는게 보편적인가요??

구글링할때 검색어는 뭐라고 적어야하나요?? 잘모르겠어서 직접 질문 올려봅니다 ㅜㅜ

안촙 1 (280 포인트) 님이 2022년 4월 29일 질문

1개의 답변

+1 추천

우선 검색은 "How to pass data between screens in Android" 정도면 어느정도 검색결과가 나오는 것 같구요.

화면의 레이아웃이 동일하기 때문에 화면을 별개로 만들지 마시고 데이터만 변경하시는게 맞습니다.

검색결과 중 하나만 찾아보셔도 답을 구하실 수 있을 것 같구요, 제일 좋은 소스는 개발자 문서입니다.

간단하게 구현방법을 말씀드리면, 안드로이에는 Activity와 Fragment가 화면을 구성하는데 사용되는 클래스들입니다. 이 클래스들이 XML로 디자인된 레이아웃을 읽어와서 화면에 보여주는 역할을 합니다. 처음에는 Activity만 우선 보시고 익숙해지면 Fragment를 보기 시작하면 됩니다. 

간단하게 Activity에 대해서만 언급할게요.

액티비티간에 화면 전환은 Intent라는 걸 사용해서 이루어집니다. Intent가 "의도"정도의 의미인데요.내가 어떤 화면에 어떤 데이터를 가지고 나타나길 원하는지 대한 정보를 담을 클래스라고 보시면 됩니다. 이렇게 하는 이유는 안드로이드 라이프사이클이란게 있는데 생성부터 소멸까지 시스템에서 관리해야 하기 때문에 개발자가 직접 생성하지 않고 시스템에 맡기게 됩니다. 그리고 화면 회전 같은 이벤트같은 경우(Configuration change라고 불립니다) 이 때, 시스템이 액티비티를 죽였다가 다시 생성을 해주게 됩니다.  만약 화면 전환시에 Intent를 이용하지 않고 데이터를 전달할 경우 configuration change가 발생하면 데이터 사라지게 되기 때문에 Intent를 이용해서 액티비티 전환을 해야 합니다.

호출방법은 아래와 같습니다.  호출하는 쪽에서 아래처럼 오픈할 액티비티를 명시하고 데이터를 전달하고 Context.startActivity(Intent)를 호출합니다. this는 Context의 인스턴스입니다. Activity가 Context를 확장한 클래스라 this로 넘길 수 있습니다.

Intent intent = new Intent(this, SecondActivity.class);
itent.putExta("StringKey", "아무문자열");
itent.putExta("IntKey", 1004);
startActivity(intent);

 

위에서는 String과 int같은 원시타입만 저장했지만, 커스텀 오브젝트, List 같은 클래스도 가능합니다. 다만 커스텀 클래스의 경우는 Serializable이나 Parcelable 인터페이스르 구현해야만 합니다. 이 부분도 개발자 문서를 참고해서 자세하게 공부를 하시길 바랍니다.

https://developer.android.com/reference/android/content/Intent

putExtra의 첫번째 인자는 String 타입의 키캆입니다. 키값은 개발자가 임의로 정의하면 되며, 전달할 때와 값을 읽을 때 같은 키값을 사용하면 됩니다.

값을 읽는 액티비티에서는, 아래처럼 getIntent()메소드를 통해 intent에 접근할 수 있구요, putExtra를 호출핳 때 사용했던 키값을 사용해서 읽어오면 되구요, getStringExtra와 getIntExtra의 두번째 인자는 값이 존재하지 않을 때 사용할 기본값입니다.

String stringValue = getIntent().getStringExtra("StringKey", "");
int intValue = getIntent().getIntExtra("IntKey", 0);

 

도움이 되시길.

 

 

spark (227,530 포인트) 님이 2022년 4월 29일 답변
...