package com.ouwenjie.note.adapter; import android.content.Context; import android.support.v7.widget.CardView; import android.support.v7.widget.RecyclerView; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.TextView; import com.ouwenjie.note.R; import com.ouwenjie.note.db.NoteDatabaseHelper; import com.ouwenjie.note.model.BaseNote; import java.util.ArrayList; import java.util.Iterator; import java.util.List; /** 笔记列表 适配器 * Created by 文杰 on 2015/4/30. */ public class BaseNoteAdapter extends RecyclerView.Adapter<BaseNoteAdapter.ViewHolder>implements View.OnClickListener ,View.OnLongClickListener{ private Context context; private List<BaseNote> noteList = new ArrayList<>(); private OnItemClickListener onItemClickListener; private OnItemLongClickListener onItemLongClickListener; private NoteDatabaseHelper dbHelper = new NoteDatabaseHelper(); public BaseNoteAdapter(Context context, List<BaseNote> noteList){ super(); this.context = context; this.noteList = noteList; } public void setOnItemClickListener(OnItemClickListener listener){ onItemClickListener = listener; } public void setOnItemLongClickListener(OnItemLongClickListener onItemLongClickListener){ this.onItemLongClickListener = onItemLongClickListener; } @Override public BaseNoteAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { View view = LayoutInflater.from(parent.getContext()) .inflate(R.layout.layout_item_note,parent,false); // U can set the view's size, margins, paddings and layout parameters // ... view.setOnClickListener(this); view.setOnLongClickListener(this); return new ViewHolder(view); } @Override public void onBindViewHolder(ViewHolder viewHolder, int position) { BaseNote note = noteList.get(position); viewHolder.mContent.setText(note.getContent()); viewHolder.mDate.setText(note.getLastChangeDate()); int bgColor = note.getBgColor(); switch (bgColor){ case BaseNote.LIGHT_BLUE: viewHolder.mCardView.setCardBackgroundColor(context.getResources().getColor(R.color.light_blue)); break; case BaseNote.LIGHT_YELLOW: viewHolder.mCardView.setCardBackgroundColor(context.getResources().getColor(R.color.light_yellow)); break; case BaseNote.LIGHT_RED: viewHolder.mCardView.setCardBackgroundColor(context.getResources().getColor(R.color.light_red)); break; case BaseNote.LIGHT_GREEN: viewHolder.mCardView.setCardBackgroundColor(context.getResources().getColor(R.color.light_green)); break; } long dbId = dbHelper.getId(note); viewHolder.itemView.setTag(String.valueOf(dbId)); // 将当前的note 的 id 保存起来 // LogUtils.e("Note ID == " + String.valueOf(dbId)); } @Override public int getItemCount() { return noteList.size(); } public void addItem(BaseNote note, int position) { noteList.add(position, note); notifyItemInserted(position); //Attention! } public void removeItem(BaseNote note) { BaseNote rNote = null; for(BaseNote baseNote : noteList){ if(dbHelper.getId(baseNote) == dbHelper.getId(note) ){ rNote = baseNote; } } if(rNote != null) { int position = noteList.indexOf(rNote); // 根据 dbID 来选取Note ,是因为传进来了的note 可能是改变后的note,在 noteList 里面很可能找不到 noteList.remove(position); notifyItemRemoved(position);//Attention! } } public void searchNotes(String string){ List<BaseNote> otherNote = new ArrayList<>(); Iterator<BaseNote> iterator = noteList.iterator(); while(iterator.hasNext()) { BaseNote note = iterator.next(); if (!note.getContent().contains(string)) { otherNote.add(note); } } for(BaseNote note : otherNote){ removeItem(note); } } public void removeAllItem(){ noteList.clear(); notifyDataSetChanged(); } @Override public void onClick(View v) { if(onItemClickListener != null){ onItemClickListener.onItemClick((String) v.getTag()); } } @Override public boolean onLongClick(View v) { if(onItemLongClickListener != null){ onItemLongClickListener.onItemLongClick((String) v.getTag()); } return false; } public static class ViewHolder extends RecyclerView.ViewHolder{ public View itemView; public TextView mContent; public TextView mDate; public CardView mCardView; public ViewHolder(View view) { super(view); itemView = view; mContent = (TextView) view.findViewById(R.id.note_content_tv); mDate = (TextView) view.findViewById(R.id.note_last_date_tv); mCardView = (CardView) view.findViewById(R.id.note_cardview); } } public interface OnItemClickListener { public void onItemClick(String dbID); } public interface OnItemLongClickListener{ public void onItemLongClick(String dbID); } }