当listview中存在listview时,如何在activity(actionbar)中实现searchview

Sha*_*hmi 5 android android-listview android-fragments

我正在开发一个应用程序,其中searchview位于主要活动的操作栏中.在主要活动中有3个片段.每个片段都有一个列表视图.问题是,当在activity的操作栏中实现searchview时,如何对片段的列表项进行排序.

我正在使用简单的游标适配器和listview,其中有自定义行,其中有textview和imageview.

在此输入图像描述

这是活动中的searchview代码

SearchManager SManager =  (SearchManager) getSystemService(Context.SEARCH_SERVICE);
    MenuItem searchMenuItem = menu.findItem(R.id.action_search);
    android.support.v7.widget.SearchView searchViewAction = (android.support.v7.widget.SearchView) MenuItemCompat.getActionView(searchMenuItem);
    searchViewAction.setSearchableInfo(SManager.getSearchableInfo(getComponentName()));

    searchViewAction.setIconifiedByDefault(true);

            android.support.v7.widget.SearchView.OnQueryTextListener textChangeListener = new android.support.v7.widget.SearchView.OnQueryTextListener()
    {
        @Override
        public boolean onQueryTextChange(String newText)
        {
            // this is your adapter that will be filtered
            adapter.getFilter().filter(newText);
            System.out.println("on text chnge text: "+newText);
            return true;
        }
        @Override
        public boolean onQueryTextSubmit(String query)
        {
            // this is your adapter that will be filtered
            adapter.getFilter().filter(query);
            System.out.println("on query submit: "+query);
            return true;
        }
    };
    searchViewAction.setOnQueryTextListener(textChangeListener); 
Run Code Online (Sandbox Code Playgroud)

而片段的代码是

Cursor mCursor = getContacts();
getActivity().startManagingCursor(mCursor);



c_adapter = new SimpleCursorAdapter(getActivity(), R.layout.contact_item, mCursor,
        new String[]{ContactsContract.Contacts.DISPLAY_NAME
                , ContactsContract.Contacts.PHOTO_THUMBNAIL_URI, ContactsContract.Contacts._ID},

        new int[]{R.id.username1, R.id.ivuserpicicon1});



    if (c_adapter.getCount() == 0) {
        Toast.makeText(getActivity(), "No Items Available", Toast.LENGTH_SHORT).show();
    }

    listview = (ListView) view.findViewById(R.id.listview);
    listview.setAdapter(c_adapter);
    listview.setTextFilterEnabled(true);
Run Code Online (Sandbox Code Playgroud)

我该如何实现searchview.我需要的指导很少.

Jay*_*dil 2

与片段到活动的通信相比,活动到片段的通信相当简单。您可以查看以下链接了解这两种通信类型

http://developer.android.com/training/basics/fragments/communicating.html#Deliver

在您的活动中,您可以获得包含 ListView 的片段实例并调用所有搜索和排序操作。

假设您已添加

android:actionViewClass="android.widget.SearchView"
Run Code Online (Sandbox Code Playgroud)

对于菜单布局文件中的搜索菜单项,您可以在 Activity 的 onCreateOptionsMenu 中添加

MenuItem searchItem = menu.findItem(R.id.your_search_menu_item);
    SearchView actionSearchView = (SearchView) searchItem.getActionView();

    actionSearchView.setIconifiedByDefault(false);
    actionSearchView.setOnQueryTextListener(//Set up your OnQueryTextListener here);
Run Code Online (Sandbox Code Playgroud)

在 OnQueryTextListener 的 onQueryTextChange 方法中,您可以调用片段方法进行搜索和排序。