首先通过setListAdapter()函数知道,原来我们需要一个ListAdapter,好吧,别废话了
其中有两个List,mArrayList用于筛选显示,mOriginalValues才是添加,修改和删除的List
public class CrimeAdapter implements ListAdapter {
private final DataSetObservable mDataSetObservable = new DataSetObservable();
private ArrayList<Crime> mOriginalValues = null;
private ArrayList<Crime> mArrayList = null;
private Context mContext = null;
CrimeAdapter(Context context,ArrayList list){
mContext = context;
mOriginalValues = list;
mArrayList = new ArrayList<Crime>();
mArrayList.clear();
for (Crime c : mOriginalValues){
mArrayList.add(c);
}
}
@Override
public boolean areAllItemsEnabled() {
return true;
}
@Override
public boolean isEnabled(int i) {
return true;
}
@Override
public void registerDataSetObserver(DataSetObserver dataSetObserver) {
mDataSetObservable.registerObserver(dataSetObserver);
}
@Override
public void unregisterDataSetObserver(DataSetObserver dataSetObserver) {
mDataSetObservable.unregisterObserver(dataSetObserver);
}
public void notifyDataSetChanged() {
mArrayList.clear();
for (Crime c : mOriginalValues){
mArrayList.add(c);
}
mDataSetObservable.notifyChanged();
}
@Override
public int getCount() {
if(null != mArrayList)
return mArrayList.size();
return 0;
}
@Override
public Object getItem(int i) {
return mArrayList.get(i);
}
@Override
public long getItemId(int i) {
return i;
}
@Override
public boolean hasStableIds() {
return false;
}
@Override
public View getView(int i, View view, ViewGroup viewGroup) {
if(null == view){
view = LayoutInflater.from(mContext).inflate(R.layout.list_item_crime,null);
}
Crime c = (Crime) getItem(i);
TextView titleView = (TextView) view.findViewById(R.id.crime_title);
titleView.setText(c.getTitle());
TextView dateView = (TextView) view.findViewById(R.id.crime_date);
dateView.setText(c.getData());
CheckBox solvedCheckBox = (CheckBox) view.findViewById(R.id.checkBox);
solvedCheckBox.setChecked(c.getSolved());
return view;
}
@Override
public int getItemViewType(int i) {
return i;
}
@Override
public int getViewTypeCount() {
return mArrayList.size();
}
@Override
public boolean isEmpty() {
return false;
}
public void updateList(String s){
if (null == s){
s = "";
}
mArrayList.clear();
for (Crime c : mOriginalValues){
if (isContain(c.toString(),s)){
mArrayList.add(c);
}
}
mDataSetObservable.notifyChanged();
}
private boolean isContain(String line, String container){
Pattern p = Pattern.compile(container);
Matcher m = p.matcher(line);
boolean result = m.find();
return result;
}
public Crime get(int i){
return mArrayList.get(i);
}
}
notifyDataSetChanged()这个函数很关键用于刷新ListView
好了,在你的onActivityCreated()中写上这么一句
<span style="white-space:pre"> </span>adapter = new CrimeAdapter(getActivity(),mCrimeList);
setListAdapter(adapter);
哈哈,还没完呢!!!!这个也别忘了
sv.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
@Override
public boolean onQueryTextSubmit(String s) {
return false;
}
@Override
public boolean onQueryTextChange(String s) {
adapter.updateList(s);
return true;
}
});//监听输入框字符串变化
OK,动起来了有木有!!!!