안녕세계

[안드로이드] RecyclerView - 아이템 강조 (Highlight) 본문

[안드로이드] RecyclerView - 아이템 강조 (Highlight)

Junhong Kim 2017. 8. 8. 16:49
728x90
반응형

RecyclerView에서 특정 아이템을 선택했을 때, 해당 아이템만 강조하고 싶은 경우가 있습니다.


[Step 1] 전역 변수로 Position 변수를 정의합니다.

private int selectedPosition = -1;

[Step 2] OnBindViewHolder에 아래 코드를 작성합니다.

// 선택 항목 강조
if(selectedPosition == position) {
holder.genre.setBackgroundResource(R.drawable.bg_primary_corner);
holder.genre.setTextColor(ContextCompat.getColor(mContext, R.color.white));
} else {
holder.genre.setBackgroundResource(R.drawable.bg_white_corner);
holder.genre.setTextColor(ContextCompat.getColor(mContext, R.color.black));
}

[Step 3] 아이템 클릭시 position 값을 전역 변수에 할당후 notifyDataSetChanged() 합니다

holder.genre.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
// 선택 항목 강조
selectedPosition = position;
notifyDataSetChanged();

[onBindViewHolder Full Code 예]

@Override
public void onBindViewHolder(final CultureEventGenreAdapter.ViewHolder holder, final int position) {
final CultureEventGenreItem item = items.get(position);

// 선택 항목 강조
if(selectedPosition == position) {
holder.genre.setBackgroundResource(R.drawable.bg_primary_corner);
holder.genre.setTextColor(ContextCompat.getColor(mContext, R.color.white));
} else {
holder.genre.setBackgroundResource(R.drawable.bg_white_corner);
holder.genre.setTextColor(ContextCompat.getColor(mContext, R.color.black));
}

holder.genre.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
// 선택 항목 강조
selectedPosition = position;
notifyDataSetChanged();

// 이전 행사 목록 초기화
CultureEventWithGenreFragment.eventItems.clear();

switch (item.getGenre()) {
case "콘서트":
searchEventWithGenre(1);
break;
case "클래식":
searchEventWithGenre(2);
break;
case "뮤지컬/오페라":
searchEventWithGenre(3);
break;
case "연극":
searchEventWithGenre(5);
break;
case "무용":
searchEventWithGenre(6);
break;
case "전시/미술":
searchEventWithGenre(7);
break;
case "기타":
searchEventWithGenre(10);
break;
case "국악":
searchEventWithGenre(11);
break;
case "축제":
searchEventWithGenre(12);
break;
case "독주/독창회":
searchEventWithGenre(17);
break;
case "영화":
searchEventWithGenre(18);
break;
case "문화교양/강좌":
searchEventWithGenre(19);
break;
default:
Toast.makeText(mContext, "서비스 준비중 입니다", Toast.LENGTH_SHORT).show();
break;
}
}
});

holder.genre.setText(item.getGenre());
}

[ 결과 화면 ]


참고

[1] https://stackoverflow.com/questions/39138315/how-to-highlight-selected-item-in-recyclerview

728x90
반응형
Comments