android - 当 fragment 中存在 ListView 时,如何在 Activity (操作栏)中实现搜索 View

标签 android android-fragments android-listview

我正在开发一个应用程序,其中 searchview 位于主要 Activity 的操作栏中。在主要 Activity 中有 3 个 fragment 。每个 fragment 中都有一个 ListView 。问题是当 searchview 在 Activity 的操作栏中实现时,如何对 fragment 的列表项进行排序。

我正在使用简单的游标适配器和具有自定义行的 ListView ,其中有 TextView 和 ImageView 。

enter image description here

这是activity中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); 

fragment 的代码是

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

如何实现搜索 View 。我几乎不需要指导。

最佳答案

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

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

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

假设你已经添加了

android:actionViewClass="android.widget.SearchView"

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

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

关于android - 当 fragment 中存在 ListView 时,如何在 Activity (操作栏)中实现搜索 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29972651/

相关文章:

android - 如何解析 Facebook 数据

安卓 ListView : Header/Footer that fills the remaining space on screen

java - Windows 7 上的 AVD 无法连接到 Linux 服务器

android - 在 Ubuntu 上安装 Cordova 会给出“...cordova/node_modules/q/q.js :126: error

android - 未找到 setFragmentResult 和 setFragmentResultListener 包( Unresolved reference )

java - RecyclerView 根本不显示。我找不到错误。我该如何解决?

带有两个拇指的 Android Seekbar

Android - 检测 RecyclerView 中的最后一个项目何时可见

android - fragment 和方向改变

java - 使用数组适配器将对象的多个值分配给 ListView 中的单个项目