본문

160404A(월)

interface를 사용한 Adapter와 Layout간의 데이터 송수신



기존의 ListView(그것도 horizontalListView라는 기괴한 오픈소스)를 RecyclerView로 리펙토링(?)하였다.


문제는 AdapterView에서 가지고 있던 onItemClickListener

이를 implements하여 position을 사용하던 기존 코드를 어떻게 바꿔야 하는지 조언을 구했다.


해결책으로 Adapter에서 interface를 선언하고 Layout에서 이를 implements하여 사용.

그리고 Adapter를 선언해줄때 implements한 내용을 보내주면 된다.


public class ExtCharPalletLayout extends RelativeLayout
implements OnClickListener,
ActiconGroupRecyclerViewAdapter.ActiconClickListener,
NateOnEmotLayout.NateOnEmotLayoutListener,
CustomEmotLayout.CustomEmotLayoutListener,
ActiconLayout.ActiconLayoutListener {


. . .



/**
* 팔렛트 그룹 중 액티콘그룹 선택
*/
@Override
public void ItemClicked(int position) {
// 스와이프시의 동시 선택을 위해 ActiconGroupList 의 setSelctedItem 으로 이동
// 액티콘 그룹 선택 시 시간 기록
/*if (mActiconGroupAdapter != null) {
ActiconGroupData data = mActiconGroupAdapter.getItem(position);
if (data != null) {
ActiconManager.getInstance(mContext).saveActiconCheckTime(data.productSeq, data.updateUTC);
}
}*/

setPalletGroupPosition(getPalletPosition(position));

mListener.onSetGroupActicon();

// 액티콘 그룹 중 하나가 선택된 경우 하위 액티콘 갱신
refreshActiconGroupMode(position);
}


.  .  .



}









public class ActiconGroupRecyclerViewAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
private LayoutInflater mInflater = null;
private Context mContext = null;
private Object mParent = null;

/**
* TYPE_ACTICON
* TYPE이 액티콘이면 액티콘 그룹을 보여줌
*
* TYPE_SETTING
* TYPE이 세팅이면 세팅화면으로 넘어감
*/
public final static int TYPE_ACTICON = 0;
public final static int TYPE_SETTING = 1;

private boolean mDataReceiveError = false;
private ArrayList<ActiconGroupData> mActiconGroupList = new ArrayList<ActiconGroupData>();

/**
* 액티콘 그룹 선택에 대한 interface
*/
private ActiconClickListener mActiconClickListener;

public ActiconGroupRecyclerViewAdapter(Context context, Object parent, ActiconClickListener acticonClickListener) {
this.mContext = context;
this.mInflater = LayoutInflater.from(context);
this.mParent = parent;
this.mActiconClickListener = acticonClickListener;
}


.  .  .


final int viewPosition = position;
((ActiconGroupListViewHolder) holder).mImgLayout.setOnClickListener(new View.OnClickListener() {

@Override
public void onClick(View v) {
mActiconClickListener.ItemClicked(viewPosition);
}
});

. . .



/**
* 기존 AdapterView.ItemClickListener를 대체하기 위한 인터페이스
* ExtCharPalletLayout에서 implements
*/
public interface ActiconClickListener {
public void ItemClicked(int position);

public void settingClicked();
}



'Mobile > Android' 카테고리의 다른 글

160405A(화)  (0) 2016.04.05
160405A(화)  (0) 2016.04.05
160331A(목)  (0) 2016.03.31
160330A(수)  (1) 2016.03.30
160329A(화)  (0) 2016.03.29

공유

댓글