Android问题集第三方控件控件与三方的依赖

MaterialSearchView搜索

2019-03-20  本文已影响102人  君袅

Android Material Design 中其实有搜索框SearchView,但是并不怎么好用,所以这里介绍三方的一个控件
MaterialSearchView,地址:https://github.com/MiguelCatalan/MaterialSearchView

使用:
1.依赖

implementation 'com.miguelcatalan:materialsearchview:1.4.0'

2.布局

        <FrameLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content">
            <android.support.v7.widget.Toolbar
                app:titleTextColor="@color/white"
                android:id="@+id/toolBar"
                android:background="@color/colorPrimaryDark"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"/>

            <com.miguelcatalan.materialsearchview.MaterialSearchView
                android:id="@+id/search_view"
                android:layout_width="match_parent"
                android:layout_height="wrap_content" />
        </FrameLayout>

3.添加menu

    <item
        android:id="@+id/action_search"
        android:icon="@drawable/ic_action_action_search"
        android:orderInCategory="100"
        android:title="@string/abc_search_hint"
        app:showAsAction="always" />

4.添加选项菜单

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.home_nenu, menu);

        mSearchItem = menu.findItem(R.id.action_search);
        mSearchItem.setVisible(false);
        mSearchView.setMenuItem(mSearchItem);

        return true;
    }

5.监听

    private void initSou() {
        mSearchView.setOnQueryTextListener(new MaterialSearchView.OnQueryTextListener() {
            @Override
            public boolean onQueryTextSubmit(String query) {
                EventBus.getDefault().postSticky(query);
                //提交查询信息的监听
                ToastUtil.showShort("提交的搜索信息为:"+ query);
                //Do some magic
                return false;
            }

            @Override
            public boolean onQueryTextChange(String newText) {
                //Do some magic
                //输入框文本发生改变的时候回调
                ToastUtil.showShort("文本发生改变"+ newText);
                return false;
            }
        });

        mSearchView.setOnSearchViewListener(new MaterialSearchView.SearchViewListener() {
            @Override
            public void onSearchViewShown() {
                //搜索框显示的时候回调
                //Do some magic

                Log.e("zl", "onSearchViewShown: "+"show" );
            }

            @Override
            public void onSearchViewClosed() {
                //Do some magic
                //搜索框折叠的时候回调
                Log.e("zl", "onSearchViewClosed: "+"close");
            }
        });
    }

6.判断搜索框是否展开+代码折叠搜索框(点击回退)

    /**
     * 点击返回键的时候会调用
     */
    @Override
    public void onBackPressed() {
        if (mSearchView.isSearchOpen()) {
            mSearchView.closeSearch();
        } else {
            super.onBackPressed();
        }
    }

7.通常我们会遇到有的fragment有搜索栏,但有的没有,我们要在切换fragment是只把有的添加搜索框

    /**
     * 切换碎片
     *
     * @param type ,除了是类型外,还是 position
     */
    private void switchFragment(int type) {
        FragmentTransaction transaction = manager.beginTransaction();
        Fragment fragment = list.get(type);
        //fragment是否有添加过
        if (!fragment.isAdded()) {
            transaction.add(R.id.frame, fragment);
        }

        //隐藏上一个碎片
        Fragment lastFragment = list.get(mLastType);
        transaction.hide(lastFragment);
        //显示碎片
        transaction.show(fragment);
        transaction.commit();

        //切换完成之后,当前的fragmnet就是下一次切换要隐藏的Fragmnet
        mLastType = type;

        //隐藏或者显示searchView------------------------------------在这判断type是切换的fragment的坐标
        if (type == TYPE_WEIXIN || type == TYPE_GANK){
            mSearchItem.setVisible(true);
        }else {
            mSearchItem.setVisible(false);
        }
    }

二.以上是基本的使用

但是,在我们通常使用的时候,需要将搜索出来的对象,也需要显示出来,所以得基本思路就是通过,第5步骤的监听将输入的内容,传到对应的fragment中将,然后,重新请求输入内容的接口,复用adapter将原来的list清空,只添加你重新请求的数据,只显示他搜索的内容, 上拉刷新可恢复成没有搜索时的内容

上一篇下一篇

猜你喜欢

热点阅读