[210728] 안드로이드 리사이클러뷰(RecyclerView) 아이템 추가하기(addItem())
다들 알다시피 많은 앱을 사용하다보면 리스트 형태의 구조를 아주 많이 볼 수 있다.
'리스트뷰(ListView)'를 사용할 수도 있지만, 보다 효율적이어서 더 많이 사용하는게 '리사이클러뷰(RecyclerView)' 이다.
(리사이클러뷰가 어떤 것인지는 https://habilism.tistory.com/7 이 글을 참고하면 좋을 듯 하다. )
그런데 리사이클러뷰를 사용할 때에는 코드에 미리 아이템의 데이터를 입력해둘 때도 있지만,
사용자가 원할 때 원하는 아이템을 추가해줘야 할 때도 많다.
이번 시간에는 메인 액티비티에 있는 버튼을 누르면 다른 액티비티인 작성 액티비티로 화면을 전환하여
데이터 입력을 하고, 작성 액티비티에 있는 버튼을 누르면 다시 메인 액티비티로 화면이 전환되면서
입력했던 데이터들이 어댑터를 통해 메인 액티비티의 리사이클러뷰에 추가되는 방법에 대해서 알아볼 것이다.
먼저, 메인 액티비티에서 버튼을 누르면 화면 전환이 되는데, 전환이 되고 끝나는 게 아니라, 데이터들을 받아서
다시 메인 액티비티 화면으로 돌아올 것이므로 인텐트를 보낼 때 startActivity(intent)가 아닌 startActivityForResult(intent, requestCode)를 호출할 것이다.
1
2
|
Intent intent = new Intent(getApplicationContext(), WriteActivity.class);
startActivityForResult(intent, 101);
|
cs |
여기서 requestCode. 즉, 요청 코드가 무엇이냐면 지금 우리가 구현할 기능은 두 개의 액티비티끼리만 화면 전환을 하여 데이터를 주고 받지만, 더 큰 규모의 앱을 만들게 되면 많은 양의 화면이 왔다갔다하면서 데이터를 주고 받게 되는데, 이럴 때에는 requestCode를 사용해서 어디서 온 액티비티인지 구분을 할 수 있다.
다시 데이터를 돌려 받을 때는 콜백 메소드인 onActivityResult()를 통해서 받는데, 이 메소드는 조금 뒤에 알아보도록
하자.
이렇게 화면을 전환하면 데이터를 입력할 수 있는 액티비티인 WriteActivity 화면으로 오게 된다.
여기서 사용자가 원하는 데이터를 입력하면 된다.
데이터 입력 후, 버튼을 눌러서 입력한 데이터들을 다시 메인 액티비티로 보내야하는데 아래의 코드처럼
작성하면 보낼 수 있다.
1
2
3
4
5
6
7
8
|
public void sendMemo() {
String memo = memoEdt.getText().toString();
Intent intent = new Intent(this, MainActivity.class);
intent.putExtra("memo", memo);
setResult(RESULT_OK, intent);
finish();
}
|
cs |
memoEdt라는 EditText에 원하는 문자열을 입력하고 입력한 문자열을 문자열 변수 memo에 할당한다.
그리고 메인 액티비티로 보내는 인텐트를 생성하고 그 인텐트에 memo를 넣어서
인텐트를 finish() 통해 이전 액티비티인 메인 액티비티로 보낸다.
이렇게 보낸 인텐트를 받아야 하는데, 메인 액티비티의 onActivityResult() 콜백 메소드로 받아서 처리할 수 있다.
1
2
3
4
5
6
7
8
9
10
11
12
13
|
@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent intent) {
super.onActivityResult(requestCode, resultCode, intent);
if (requestCode == 101) {
if (intent != null) {
String memo = intent.getStringExtra("memo");
adapter.addItem(new Memo(memo));
adapter.notifyDataSetChanged();
}
}
}
|
cs |
우리가 아까 메인 액티비티에서 작성 액티비티로 인텐트를 보낼 때 requestCode에 101를 지정했었다.
그래서 다시 돌려 받을 때 requestCode가 101인 것만 받아서 처리할 수 있다.
위처럼 받은 인텐트에서 "memo"라는 것을 뽑아내어 문자열 변수 memo에 할당한다.
그리고 memo를 어댑터의 addItem() 메소드로 새 아이템을 추가하면된다.
(notifyDataSetChanged()를 해야 갱신이 되기 때문에 잊지말고 해주자.)
이렇게 리사이클러뷰에 새 아이템을 추가하는 방법에 대해서 알아보았다.
피드백은 언제나 환영입니다.