public class NoteAdapter extends BaseAdapter implements Filterable {
private Context mcontext;
private List<Note> backList;//用来备份原始数据
private List<Note>noteList;//这个数据是会改变的,所以要有个变量来备份一下原始数据
private MyFilter mFilter;
public NoteAdapter(Context context,List<Note> noteList){
Log.d("Adapter","adapter_creat");
this.mcontext=context;
this.noteList=noteList;
backList=noteList;
}
@Override
public int getCount() {
Log.d("Adapter","adapter_noteList.size");
return noteList.size();
}
@Override
public Object getItem(int position) {
return noteList.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
Log.d("Adapter","adapter_view");
SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(mcontext);
mcontext.setTheme((sharedPreferences.getBoolean("nightMode", false)? R.style.NightTheme: R.style.DayTheme));
@SuppressLint("ViewHolder") View v=View.inflate(mcontext,R.layout.note_layout,null);
TextView tv_content=v.findViewById(R.id.tv_content);
TextView tv_time=v.findViewById(R.id.tv_time);
String allText=noteList.get(position).getContent();
tv_content.setText(allText);
tv_time.setText(noteList.get(position).getTime());
v.setTag(noteList.get(position).getId());
return v;
}
@Override
public Filter getFilter() {
if (mFilter==null){
mFilter=new MyFilter();
}
return mFilter;
}
class MyFilter extends Filter {
//我们在performFiltering(CharSequence charSequence)这个方法中定义过滤规则
@Override
protected FilterResults performFiltering(CharSequence charSequence) {
FilterResults result = new FilterResults();
List<Note> list;
if (TextUtils.isEmpty(charSequence)) {//当过滤的关键字为空的时候,我们则显示所有的数据
list = backList;
} else {//否则把符合条件的数据对象添加到集合中
list = new ArrayList<>();
for (Note note : backList) {
if (note.getContent().contains(charSequence)) {
list.add(note);
}
}
}
result.values = list; //将得到的集合保存到FilterResults的value变量中
result.count = list.size();//将集合的大小保存到FilterResults的count变量中
return result;
}
//在publishResults方法中告诉适配器更新界面
@Override
protected void publishResults(CharSequence charSequence, FilterResults filterResults) {
noteList = (List<Note>)filterResults.values;
if (filterResults.count>0){
notifyDataSetChanged();//通知数据发生了改变
}else {
notifyDataSetInvalidated();//通知数据失效
}
}
}
}
适配器示例
于 2022-05-30 23:26:35 首次发布