如何过滤自定义listView

How to filter custom listView

我尝试了几个代码和 Whosebug 的许多解决方案,但 none 对我有用:( 。我不知道为什么会这样。我正在寻找一个很好的解决方案。

这是我的过滤器代码(在我的自定义列表适配器中)

public Filter getFilter() {
    if(valueFilter==null) {
        valueFilter=new ValueFilter();
    }
    return valueFilter;
}

private class ValueFilter extends Filter {

    private ArrayList<String> mStringFilterList;
    private LayoutInflater mInflater;
    private ValueFilter valueFilter;

    //Invoked in a worker thread to filter the data according to the constraint.
    @Override
    protected FilterResults performFiltering(CharSequence constraint) {

        FilterResults results = new FilterResults();
        if (constraint != null && constraint.length() > 0) {
            ArrayList<String> filterList = new ArrayList<String>();
            for (int i = 0; i < mStringFilterList.size(); i++) {
                if (mStringFilterList.get(i).contains(constraint)) {
                    filterList.add(mStringFilterList.get(i));
                }
            }
            results.count = filterList.size();
            results.values = filterList;
        } else {
            results.count = mStringFilterList.size();
            results.values = mStringFilterList;
        }

        return results;
    }

    //Invoked in the UI thread to publish the filtering results in the user interface.
    @SuppressWarnings("unchecked")
    @Override
    protected void publishResults(CharSequence constraint,FilterResults results) {
        listData = (ArrayList<ContactItem>) results.values;
        notifyDataSetChanged();
    }
}

这是我的片段

 inputSearch.addTextChangedListener(new TextWatcher() {
            public void onTextChanged(CharSequence cs, int arg1, int arg2, int arg3) {
                // When user changed the Text
                adapter.getFilter().filter(cs);
            }

            public void beforeTextChanged(CharSequence arg0, int arg1, int arg2,
                                          int arg3) {
                // TODO Auto-generated method stub

            }

            public void afterTextChanged(Editable arg0) {
                // TODO Auto-generated method stub
            }
        });

Logcat:

10-09 00:03:54.332    6247-6247/? E/AndroidRuntime﹕ in writeCrashedAppName, pkgName :com.rupomkhondaker.sonalibank
10-09 00:03:54.332    6247-6247/? E/AndroidRuntime﹕ FATAL EXCEPTION: main
    Process: com.rupomkhondaker.sonalibank, PID: 6247
    java.lang.NullPointerException
            at com.rupomkhondaker.sonalibank.GMOFragment.onTextChanged(GMOFragment.java:59)
            at android.widget.TextView.sendOnTextChanged(TextView.java:7408)
            at android.widget.TextView.handleTextChanged(TextView.java:7467)
            at android.widget.TextView$ChangeWatcher.onTextChanged(TextView.java:9183)
            at android.text.SpannableStringBuilder.sendTextChanged(SpannableStringBuilder.java:962)
            at android.text.SpannableStringBuilder.replace(SpannableStringBuilder.java:496)
            at android.text.SpannableStringBuilder.replace(SpannableStringBuilder.java:435)
            at android.text.SpannableStringBuilder.replace(SpannableStringBuilder.java:30)
            at android.text.method.QwertyKeyListener.onKeyDown(QwertyKeyListener.java:223)
            at android.text.method.TextKeyListener.onKeyDown(TextKeyListener.java:136)
            at android.widget.TextView.doKeyDown(TextView.java:5532)
            at android.widget.TextView.onKeyDown(TextView.java:5343)
            at android.view.KeyEvent.dispatch(KeyEvent.java:2640)
            at android.view.View.dispatchKeyEvent(View.java:7700)
            at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1408)
            at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1408)
            at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1408)
            at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1408)
            at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1408)
            at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1408)
            at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1408)

完整代码在这里 question

试试这个

 PhoneListAdapter SearchItem = new PhoneListAdapter(getActivity(),listData);
 SearchItem.getFilter().filter(cs);