简体   繁体   English

我如何过滤ListView项目?

[英]How i can filter ListView items ?

I'm trying to filter ListView items with SearchView . 我正在尝试使用SearchView过滤ListView项目。

this is my XML code. 这是我的XML代码。 :

    <ListView
        android:layout_width="fill_parent"
        android:layout_height="200dp"
        android:id="@android:id/list"
        android:choiceMode="none"
        android:layout_alignParentBottom="true"
        android:layout_alignParentStart="true"
        android:layout_below="@+id/searchView"
        style="@style/CodeFont">

        </ListView>

    <ScrollView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/scrollView"
        android:layout_above="@android:id/list"
        android:layout_alignParentEnd="true"
        android:layout_toEndOf="@android:id/list" />

    <SearchView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/searchView"
        android:hint="Search contact.."
        android:layout_alignParentStart="true"
        android:layout_alignEnd="@android:id/list"

        />

and this is my java code 这是我的java代码

        ListView lv = (ListView) findViewById(android.R.id.list);
        lv.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                String poiName = ((TextView)(view.findViewById(android.R.id.text1))).getText().toString();
                Intent intent = new Intent(MainActivity.this, Message.class);
                intent.putExtra("name",poiName);
                startActivity(intent);
            }
        });

        Cursor =getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI,null,null,null,null);
        startManagingCursor(Cursor);
        String[] from = {ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME,ContactsContract.CommonDataKinds.Phone.NUMBER,ContactsContract.CommonDataKinds.Phone._ID};
        int [] to ={android.R.id.text1,android.R.id.text2};

        final SimpleCursorAdapter listadapter = new SimpleCursorAdapter(this,android.R.layout.simple_list_item_2,Cursor,from,to);
        setListAdapter(listadapter);
        list=getListView();
        list.setChoiceMode(ListView.CHOICE_MODE_NONE);

The ListView is displaying all the contacts in the user phone. ListView显示用户电话中的所有联系人。 I want to make a filter with the SearchView 我想使用SearchView进行过滤

Assume you want to retrieve all numbers that contain whatever you have entered into your SearchView and show them in ascending order. 假设您要检索包含您在SearchView输入的所有数字的所有数字,并以升序显示它们。 This can be achieved with something like this: 这可以通过以下方式实现:

    String query = searchView.getQuery().toString();
    Cursor cursor = getContentResolver().query(
            ContactsContract.CommonDataKinds.Phone.CONTENT_URI,
            null,
            TextUtils.isEmpty(query) ? null : ContactsContract.CommonDataKinds.Phone.NUMBER + " LIKE ?",
            TextUtils.isEmpty(query) ? null : new String[] {query},
            TextUtils.isEmpty(query) ? null : ContactsContract.CommonDataKinds.Phone.NUMBER + " ASC"
    );

Do not forget to notify your adapter whenever you change text in your SearchView . 每当您在SearchView更改文本时,请不要忘记通知适配器。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM