带搜索过滤器的Android Listview

带搜索过滤器的Android Listview,android,Android,我正在尝试对Android进行listView搜索。我在ContextChanged上使用SimpleCorsOrAdapter 我发现一个错误适配器无法解决或不是字段。如何解决此错误。我正在使用SimpleCorsOrAdapter。我无法使用adapter.getFilter.filtercs ListView lv; Cursor cursur1; EditText search ; int textlength=0; ArrayAdapter<String> adapter1

我正在尝试对Android进行listView搜索。我在ContextChanged上使用SimpleCorsOrAdapter 我发现一个错误适配器无法解决或不是字段。如何解决此错误。我正在使用SimpleCorsOrAdapter。我无法使用adapter.getFilter.filtercs

ListView lv;
Cursor cursur1;
EditText search ;
int textlength=0;
ArrayAdapter<String> adapter1;
@SuppressWarnings("deprecation")
@Override
protected void onCreate(Bundle savedInstanceState)
{
    super.onCreate(savedInstanceState);
     setContentView(R.layout.fragment_main);
     search = (EditText) findViewById(R.id.inputSearch);

    final String [] from={ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME,ContactsContract.CommonDataKinds.Phone.NUMBER,ContactsContract.CommonDataKinds.Phone._ID};
    int [] m={android.R.id.text1,android.R.id.text2};

    lv=getListView();
    lv.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);

    cursur1=getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, null, null, null);
    startManagingCursor(cursur1);


    @SuppressWarnings("deprecation")

     SimpleCursorAdapter adapter=new SimpleCursorAdapter(this,       android.R.layout.simple_list_item_2, cursur1, from,m);
     setListAdapter(adapter);


    search.addTextChangedListener(new TextWatcher() {

        @Override
        public void onTextChanged(CharSequence cs, int arg1, int arg2, int arg3) {
            // TODO Auto-generated method stub
        MainActivity.this.adapter.getFilters().filter(cs);

        }

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

        }

        @Override
        public void afterTextChanged(Editable arg0) {
            // TODO Auto-generated method stub

        }
    }); 

}

@Override
public long getSelectedItemId() {
    // TODO Auto-generated method stub
    return super.getSelectedItemId();
}

@Override
public int getSelectedItemPosition() {
    // TODO Auto-generated method stub
    return super.getSelectedItemPosition();
}

}试试这个。。内部添加文本更改侦听器

YourAdapterOrWhateverAdapter adapter = (YourAdapterOrWhateverAdapter) listView.getAdapter();  
adapter.getFilter().filter(s);
adapter.notifyDataSetChanged()

您可以使用AutoCompleteTextView,例如-

    private static final String[] DATE_RANGE = new String[] { "1 Day",
        "2 Days", "3 Days", "6 Months", "1 Year", "Blank" };

    AutoCompleteTextView dateRangeTV = (AutoCompleteTextView)findViewById(R.id.tv_date_range);
    dateRangeTV.setThreshold(0);

   ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
            R.layout.default_date_range_list, DATE_RANGE);
   dateRangeTV.setAdapter(adapter);
键入任何文本,它将显示列表中匹配的文本

有关详细信息,请参见的教程

  dateRangeTV.setOnTouchListener(new OnTouchListener() {

            @Override
            public boolean onTouch(View v, MotionEvent event) {
                dateRangeTV.showDropDown();

                return false;
            }
        });