*해당 포스팅은 커넥트 재단의 edwith-[부스트 코스] 안드로이드 프로그래밍의 강의 자료를 바탕으로 작성되었습니다.
화면을 여러 개 만들어서 각 액티비티 간 화면 전환을 하는 것이 이번 프로젝트에 목표입니다.
KEY POINT
1. 한줄평 작성하기, 한줄평 모두 보기를 위한 화면을 만들기.
2. 영화상세 화면의 '작성하기' 버튼을 누르면 한줄평 작성하기 화면을 띄웠다가 돌아오는 기능 만들기.
3. 영화상세 화면의 '모두 보기' 버튼을 누르면 한줄평 모두 보기 화면을 띄웠다가 돌아오는 기능 만들기.
1. 한줄평 작성하기, 한줄평 모두보기를 위한 화면을 만들기.
<한줄평 작성하기 화면>
<한줄평 모두보기 화면>
2. 영화상세 화면의 '작성하기' 버튼을 누르면 한줄평 작성하기 화면을 띄웠다가 돌아오는 기능 만들기.
인텐트를 사용하여 한줄평 작성하기 화면으로 이동합니다. 이동하는 방법은 다음과 같습니다.
메인 액티비티의 작성하기 화면을 버튼을 누른다.
버튼을 눌렀을 때 생기는 setOnClickListenr 메서드 안에서 Intent를 이용한다.
startActivityForResult(Intent intent, int requestCode); 메서드를 활용하여 한줄평 작성하기 화면을 실행한다.
writeButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(getContext(),"작성하기 버튼을 눌리셨습니다.",Toast.LENGTH_LONG).show();
Intent intent = new Intent(getContext(),Oneline.class);
startActivityForResult(intent,101);//응답을 받을때 코드 . 101 번은 한줄평 작성 액티비티 화면
}
});
이렇게 하면 작성하기 화면으로 화면전환을 한다. 인텐트는 시스템에 요청하는 하나의 매개체라고 생각하면 됩니다.
new Intent(getContext(),); 이 부분은 getApplicationContext(); 여야 하는데, 필자의 액티비티는 Fragement를 상속받았기 때문에 그 부분은 다음 장에서 설명하겠습니다.
다음은 한줄평 작성하기 화면 액티비티 입니다.
저장하기 버튼을 눌렀을 때 returnToMain이라는 메서드를 별도로 선언했습니다.
저장하기 버튼을 누르면 사용자가 입력한 내용과 별점의 데이터를 메인 액티비티로 넘겨주기 위함입니다.
액티비티 간 데이터를 전달할 때는 intent.putExtra("key 값", 각 값이 할당되어있는 변수); 의 형태로 하시면 됩니다.
액티비티 간 데이터를 전달받을 때는 intent.getExtra("key 값"); 형태로 받을 수 있습니다.
public void returnToMain(){
Intent intent = new Intent(getApplicationContext(),MainActivity.class);
intent.putExtra("content"," 저장 여부 : true");
String contents = editText.getText().toString();
float rating = ratingBar.getRating();
intent.putExtra("contents",contents);
intent.putExtra("rating",rating);
setResult(Activity.RESULT_OK,intent);
finish();
}
각 값들을 메인 액티비티에 넘겨주고 나서 setReuslt(상수값, Intent intent); 를 해주시면 됩니다.
그리고 finish();로 액티비티를 종료해주시면 됩니다.
취소하기 버튼을 눌렀을 때에는 그냥 finish(); 로 액티비티를 빠져나오면 됩니다.
3. 영화 상세 화면의 '모두 보기' 버튼을 누르면 한줄평 모두보기 화면을 띄웠다가 돌아오는 기능 만들기.
마찬가지로 메인 액티비티에서 모두 보기 버튼을 눌러서 모두보기 화면을 띄워주는 기능을 만드시면 됩니다.
allViewButton = (Button)findViewById(R.id.allViewButton);
allViewButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(getContext(),"모두보기 버튼을 눌리셨습니다.",Toast.LENGTH_LONG).show();
Intent allintent = new Intent(getContext(),Listoneline.class);
allintent.putParcelableArrayListExtra("key",adapter.items);
startActivityForResult(allintent,102);
}
});
그러면 Listoneline라는 액티비티로 화면 전환을 하게 됩니다.
이때, putParcelableArrayListExtra라는 것은 메인 액티비티의 리스트 뷰안에 저장되어있는 내용들을 다른 액티비티로 보내는데 parcel을 이용하여 보낸다는 것입니다. arrayList를 통째로 보내기 때문에 효율이 좋다고 생각했습니다.
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_listoneline);
listView = (ListView) findViewById(R.id.listView2);
adapter = new MovieaAdapter();
Intent intent = getIntent();
adapter.items = intent.getParcelableArrayListExtra("key");
listView.setAdapter(adapter);
ImageButton imageButton = (ImageButton) findViewById(R.id.writeButton);
imageButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(getApplicationContext(),"작성하기 버튼을 눌리셨습니다.",Toast.LENGTH_LONG).show();
Intent intent = new Intent(getApplicationContext(),Oneline.class);
startActivityForResult(intent,1001);
}
});
}
마찬가지로 모두 보기 화면에서도 작성하기 화면을 불러들일 수도 있습니다. 그리고 getParcelableArrayListExtra를 이용하여 메인 액티비티에 저장되어있는 리스트뷰(arrayList)를 그대로 받을 수 있습니다.
이런 공부를 하면서 제가 정확하게 한 건지는 모르겠지만 인텐트의 사용방법을 반복적으로 학습해야 된다고 느꼈습니다. parcel 용량 문제를 해결해준다는 것 또한 배웠습니다.
'Android' 카테고리의 다른 글
[안드로이드 기초 : 버튼 사용하기] (0) | 2021.01.30 |
---|---|
[안드로이드 스튜디오 : 스플래시 화면 구현 하기] (0) | 2021.01.30 |
[안드로이드 스튜디오 : 카메라 사용해보기(미리보기, SurfaceView)] (0) | 2021.01.30 |
[부스트코스:안드로이드 프로그래밍] 4. 화면 내비게이션 (0) | 2021.01.30 |
[부스트코스:안드로이드 프로그래밍] 프로젝트 B 좋아요와 한줄평 리스트. (0) | 2021.01.30 |