본문 바로가기
Android Studio

[Android Studio] RecyclerView Adapter에서 새로운 액티비티를 실행하는 방법

by dong_su 2023. 12. 28.

RecyclerView Adapter에서 ViewHolder에 카드뷰를 클릭했을때의 이벤트를 입력하려고 한다.

새로운 액티비티를 열기 위해서는 새로운 액티비티를 실행할 액티비티가 필요한데 어댑터는 액티비티가 아니다.


MainActivity

// 어뎁터 만들고 화면에 적용
        adapter = new ContactAdapter(MainActivity.this, contactArrayList);
        recyclerView.setAdapter(adapter);

메인액티비티에서 어뎁터 만들고 화면에 적용하는 부분에서 첫번째 인자에 MainActivity.this를 넣었는데

 

ContactAdapter 

    Context context;
    ArrayList<Contact> contactArrayList;

    public ContactAdapter(Context context, ArrayList<Contact> contactArrayList) {
        this.context = context;
        this.contactArrayList = contactArrayList;
    }

ContactAdapter 클래스를 들어가보면 위 MainActivity.this가 생성자 함수의 첫번째 인자의 context로 들어온다.


결과) ContactAdapter 

cardView.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        Intent intent = new Intent(context, UpdateActivity.class);

        int index = getAdapterPosition();
        Contact contact = contactArrayList.get(index);

        intent.putExtra("index", index);
        intent.putExtra("contact", contact);

        ((MainActivity) context).launcher.launch(intent);
    }
});

그러므로 인덴트 객체를 생성할 때 생성자의 첫 인자에 MainActivity.this가 아닌 context를 입력하면 된다.