package com.miris.ui.adapter; import android.content.Context; import android.os.Message; import android.support.v7.widget.RecyclerView; import android.support.v7.widget.RecyclerView.ViewHolder; import android.support.v7.widget.RecyclerView.Adapter; import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.view.View.OnClickListener; import android.widget.TextView; import android.widget.ImageView; import butterknife.ButterKnife; import butterknife.InjectView; import java.util.ArrayList; import com.miris.net.MessageListData; import static com.miris.ui.activity.BaseActivity.messageData; import com.miris.R; /** * Created by miris on 2016-06-28. */ public class MessageAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> implements View.OnClickListener { /*추가해야할 사항 * 1. 삭제버튼에 key 값을 넣어야 함. * */ private Context context; private OnMsgItemClickListener onMsgItemClickListener; private ArrayList<MessageListData> searcharraylist; private int itemsCount = 1; private boolean animateItems = false; private String flag = "0"; public MessageAdapter(Context context, ArrayList<MessageListData> items, String flag) { this.context = context; messageData = items; this.searcharraylist = new ArrayList<MessageListData>(); this.searcharraylist.addAll(items); this.flag = flag; } public static class MsgViewHolder extends RecyclerView.ViewHolder{ @InjectView(R.id.MsgTitle) TextView titleView; // 쪽지 타이틀 뷰 @InjectView(R.id.MsgDate) TextView dateView; // 쪽지 보낸 일자 뷰 @InjectView(R.id.MsgId) TextView idView; // 쪽지 보낸 아이디 뷰 @InjectView(R.id.ivMsgImg) ImageView keyView; // 쪽지 삭제 버튼 이미지(키 값) public MsgViewHolder(View view){ super(view); ButterKnife.inject(this, view); } } @Override public void onClick(View view) { final int viewId = view.getId(); if (viewId == R.id.ivMsgImg) { if (onMsgItemClickListener != null) { onMsgItemClickListener.onDeleteMsg(view, (Integer) view.getTag()); } } else if (viewId == R.id.MsgTitle){ onMsgItemClickListener.onDetailMsg(view, (Integer) view.getTag()); } else if (viewId == R.id.MsgId){ onMsgItemClickListener.onDetailMsg(view, (Integer) view.getTag()); } } public interface OnMsgItemClickListener { public void onDeleteMsg(View v, int position); // 메시지 삭제 public void onDetailMsg(View v, int position); // 메시지 상세 보기 } /* onCreateViewHolder() : 데이터를 보여주는데 사용하는 뷰를 갖도록 초기화된 ViewHolder 객체를 생성하고 반환한다. 이때 그뷰는 XML 레이아웃 파일을 인플레이트(Inflate)하여 생성함. */ @Override public ViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) { View v = LayoutInflater.from(viewGroup.getContext()) .inflate(R.layout.item_message, viewGroup, false); MsgViewHolder viewHolder = new MsgViewHolder(v); viewHolder.keyView.setOnClickListener(this); viewHolder.titleView.setOnClickListener(this); viewHolder.idView.setOnClickListener(this); return viewHolder; } /* onBindViewHolder() : 이 메서드는 두개의 파라미터를 받는다. onCreateViewHolder() 메서드에서 생성된 ViewHolder 객체와 보여줄 리스트 항목을 나타내는 정수값이다. 이 메서드에서는 지정된 항목의 텍스트와 그래픽 데이터를 레이아웃 뷰에 넣은후 그 객체를 RecylerView에 반환한다. 그럼으로써 RecylerView가 사용자에게 보여질 수 있다. */ @Override public void onBindViewHolder(RecyclerView.ViewHolder viewHolder, int position) { MsgViewHolder holder = (MsgViewHolder) viewHolder; Log.i("titles", messageData.get(position).getContent()); Log.i("date", messageData.get(position).getSendTime()); Log.i("objectId", messageData.get(position).getObjectId()); holder.titleView.setText(messageData.get(position).getContent()); holder.titleView.setTag(position); holder.dateView.setText(messageData.get(position).getSendTime()); if("2".equals(flag)){ // 보낸쪽지함에는 받는사람이 나오도록 함. holder.idView.setText(messageData.get(position).getReceiptId()); } else { holder.idView.setText(messageData.get(position).getSendId()); } holder.idView.setTag(position); //holder.keyView.setTag(messageData.get(position).getObjectId()); holder.keyView.setTag(position); } public void setOnMsgItemClickListener(OnMsgItemClickListener onMsgItemClickListener) { this.onMsgItemClickListener = onMsgItemClickListener; } /* getItemCount(): 리스트에 보여줄 항목의 개수를 반환하는 메서드 */ @Override public int getItemCount() { return messageData.size(); } public void updateItems(boolean animated) { itemsCount = messageData.size(); animateItems = animated; /*데이터가 변경되어 Adapter에 연결된 리스트 뷰를 갱신*/ notifyDataSetChanged(); } }