自定义ListView同步SearchView

首先通过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,动起来了有木有!!!!




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值