如何在活动(操作栏)中实现SearchView,而Fragment中存在ListView。

5

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

我正在使用简单的游标适配器和具有自定义行的列表视图,其中包含textview和imageview。

enter image description here

这是活动中搜索视图的代码:

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); 

代码片段的代码如下

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);

我该如何实现搜索视图(searchview)?我需要一些指导。


你目前尝试了什么? - Maveňツ
如果您的应用程序目前看起来像这样,请确保使用AppCompat并针对22进行目标设置,以便用户可以在Material Design中尽可能地查看它。 - Jared Burrows
我遇到了相同的问题。我在主活动中有一个搜索视图,其中包含通过使用FragmentStatePagerAdapter由Fragments填充的视图页面。列表视图包含在片段中。我需要使用主活动中的搜索视图来过滤活动选项卡的片段的列表视图。您解决了您的问题吗?请帮助我解决这个问题。 - Deepak Rattan
1个回答

2
活动与片段的通信相对于片段与活动的通信要简单得多。你可以查看以下链接了解两种类型的通信:http://developer.android.com/training/basics/fragments/communicating.html#Deliver 在你的活动中,你可以获取包含 ListView 的片段实例并调用所有搜索和排序操作。
假设你已经添加了。
android:actionViewClass="android.widget.SearchView"

在您的菜单布局文件中搜索菜单项,在活动的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);

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接