필요한 것
인터페이스!!!!
interface list_onClick_interface {
fun onCheckBox(friend_data: friend_data)
}
인터 페이스를 만들어 줍니다.
다음으로. 엑티비티나, 프래그먼트가 이 인터페이스를 상속 받도록 합니다.
class OnwToGroup_Chatting : Fragment(),list_onClick_interface
이렇게요, 그리고 위에서 선언한
fun onCheckBox(friend_data: friend_data)
요녀석을 정의해 줍니다.
그리고 이제는 어댑터 내부!
class invite_friend_list_Adapter (val context: Context, val friend_DataArray: MutableList<friend_data>,
var list_onClick_interface: list_onClick_interface,
) : RecyclerView.Adapter<mViewH>()
list_onClick_interface: list_onClick_interface 를 받을수 있도록 생성자를 지정해 줍니다.
그리고 어댑터 세팅 하시고,
list_onClick_interface.onCheckBox(데이터)
이런식으로 사용해주시면 됩니다.
참고 및 출처 : https://dreamaz.tistory.com/241
RecyclerView 사용시 RecyclerView.Adapter(이하 Adapter) 클래스를 상속받아 정의함으로써 표현하고자 하는 데이터를 리싸이클러뷰에 어떻게 표현할 지 설정할 수 있습니다. 예를들어 아래 그림과 같이 RecyclerView가 만들어졌다고 가정하겠습니다. +버튼과 -버튼을 눌러 주문하고자 하는 과일의 수량을 정하는 어플입니다.
개발자 입장에서 RecyclerView는 껍데기일 뿐이며 RecyclerView와 관련된 코드들은 대부분 Adapter에 위치하게 됩니다. 그래서 사용자가 +버튼이나 -버튼을 눌러 특정 과일의 갯수를 조절한다면 이 부분을 처리하는 코드는 Adapter에 존재합니다. 그런데 이렇게 Adapter에서 처리된 데이터(특정 과일의 갯수 등)들은 결국 Adapter에서 이 RecyclerView를 만든 Activity나 Fragment로 전달되어야 합니다. 이를 위해 Adapter에서 Activity나 Fragment에 접근이 가능해야 합니다. Adapter에서 Activity나 Fragment의 변수나 함수를 사용할 수 있어야 한다는 말입니다.
Fragment를 사용할 때는 getActivity() 함수를 통해 Activity에 쉽게 접근할 수 있습니다. 하지만 Adapter에서는 기본적으로 Activity나 Fragment에 접근할 수 있는 방법이 제공되지 않습
니다.
해결방법
그래서 Adapter에서 Activity나 Fragment에 접근하는 방법이 무엇인지 어떤 방석이 정석인지 찾아봤습니다.
위의 스택오버플로우에 나와있는 답안이 정석이라고 불릴만한 방법인 것 같습니다.
여기서 간단하게 그 방법을 보겠습니다.
먼저 OnItemClick이라는 interface를 정의합니다. 이 인터페이스의 내부에 onItemClick이라는 함수의 프로토타입을 정의합니다.
OnItemClick.java
1
2
3 |
public interface OnItemClick {
void onClick (String value);
} |
cs |
1
2
3
4
5
6
7
8
9 |
public class MainActivity extends AppCompatActivity implements OnItemClick {
recycleAdapter = new RecycleAdapter(MainActivity.this,onlineData, this);
recyclerView.setAdapter(recycleAdapter);
@Override
void onClick (String value){
// value this data you receive when increment() / decrement() called
}
} |
cs |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24 |
public class RecycleAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
...
private OnItemClick mCallback;
RecycleAdapter(Context context, List<HashMap<String, String>> onlineData, OnItemClick listener){
this.onlineData = onlineData;
this.context = context;
this.mCallback = listener;
}
public void increment(){
int currentNos = Integer.parseInt(quantity.getText().toString()) ;
quantity.setText(String.valueOf(++currentNos));
mCallback.onClick(quantity.getText().toString());
}
public void decrement(){
int currentNos = Integer.parseInt(quantity.getText().toString()) ;
quantity.setText(String.valueOf(--currentNos));
mCallback.onClick(quantity.getText().toString());
}
...
} |
cs |
'Kotlin' 카테고리의 다른 글
코틀린 안드로이드 JsonArray 를 php 로 보내기 (0) | 2019.03.01 |
---|---|
코틀린 안드로이드 ArrayList<Object> to Json (0) | 2019.02.28 |
코틀린 배열 초기화 방법 (0) | 2019.02.11 |
코틀린 안드로이드 RecyclerView ItemClickListener 만들기 (0) | 2019.02.09 |
코틀린 안드로이드 RecyclerView GridLayout 사용하기 (0) | 2019.02.09 |