zoukankan      html  css  js  c++  java
  • ActionBarSherlock的学习笔记(四) ------------ ActionBarSherlock中的搜索及SearchView的使用

    在使用ActionBarSherlock定义app的头部操作时,会经常看见搜索的动作,本文主要介绍一下搜索是如何实现的。

    1. SearchView 

    是搜索的核心组件,具体介绍请参考Android官方说明文档: http://developer.android.com/reference/android/widget/SearchView.html

    XML属性

     

    属性名称

    描述

    android:iconifiedByDefault

    设置SearchView的默认状态。

    如果为true,在没有被使用和点击展开时它将被图形化。

    android:maxWidth

    SearchView的可选择的最大宽度

    android:queryHint

    当查询条件为空时显示的一个提示字符串。

    重要的接口

     

    名称 作用
    interface          SearchView.OnCloseListener 当用户关闭SearchView时触发的回调函数
    interface          SearchView.OnQueryTextListener        当查询文本改变时的回调函数。
    interface          SearchView.OnSuggestionListener 在建议上选择事件时的回调接口。

     

    demo的核心代码

    package com.hsx.wangcuo;
    
    import android.app.SearchManager;
    import android.database.Cursor;
    import android.database.MatrixCursor;
    import android.os.Bundle;
    import android.provider.BaseColumns;
    import android.view.LayoutInflater;
    import android.view.View;
    import com.actionbarsherlock.app.SherlockActivity;
    import com.actionbarsherlock.view.MenuItem;
    import com.actionbarsherlock.view.SubMenu;
    import com.actionbarsherlock.widget.SearchView;
    import com.hsx.wangcuo.adapter.QuerySuggestionsAdapter;
    import com.hsx.wangcuo.util.ToastUtil;
    
    public class MainActivity extends SherlockActivity implements SearchView.OnSuggestionListener, SearchView.OnQueryTextListener {
        private static final String[] COLUMNS = { BaseColumns._ID, SearchManager.SUGGEST_COLUMN_TEXT_1, };
    
        private QuerySuggestionsAdapter mSuggestionsAdapter;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            initActionBarTitle();
        }
    
        private void initActionBarTitle() {
            // 可以自定义actionbar
            getSupportActionBar().setDisplayShowCustomEnabled(true);
            getSupportActionBar().setDisplayShowTitleEnabled(false);
            // 不在actionbar显示logo
            getSupportActionBar().setDisplayShowHomeEnabled(false);
            View mainActionBarView = LayoutInflater.from(this).inflate(R.layout.main_action_bar, null);
            getSupportActionBar().setCustomView(mainActionBarView);
        }
    
        @Override
        public boolean onCreateOptionsMenu(com.actionbarsherlock.view.Menu menu) {
    
            createSearchItem(menu);
    
            /*************************************************/
    
            MenuItem share = menu.add(0, 1, 2, "share");
            share.setIcon(R.drawable.abs__ic_menu_share_holo_dark);
            share.setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS);
    
            /***************************************************/
            SubMenu addMenu = menu.addSubMenu(0, 2, 3, "overflow");
            addMenu.add(0, 3, 0, "更换主题");
            addMenu.add(0, 4, 0, "系统设置");
            addMenu.add(0, 5, 0, "修改密码");
            addMenu.add(0, 6, 0, "更换头像");
    
            MenuItem overFlowItem = addMenu.getItem();
            overFlowItem.setIcon(R.drawable.abs__ic_menu_moreoverflow_holo_dark);
            overFlowItem.setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS);
    
            return super.onCreateOptionsMenu(menu);
        }
    
        /**
         * Create the search view(搜索的核心代码)
         * 
         * @param menu
         * @return void
         * @author hsx
         * @time 2014-3-16下午03:48:01
         */
        private void createSearchItem(com.actionbarsherlock.view.Menu menu) {
    
            SearchView searchView = new SearchView(getSupportActionBar().getThemedContext());
            searchView.setQueryHint("Search for countries…");
            searchView.setOnQueryTextListener(this);
            searchView.setOnSuggestionListener(this);
    
            if (mSuggestionsAdapter == null) {
                MatrixCursor cursor = new MatrixCursor(COLUMNS);
                cursor.addRow(new String[] { "1", "'Murica" });
                cursor.addRow(new String[] { "2", "Canada" });
                cursor.addRow(new String[] { "3", "Denmark" });
                mSuggestionsAdapter = new QuerySuggestionsAdapter(getSupportActionBar().getThemedContext(), cursor);
            }
    
            searchView.setSuggestionsAdapter(mSuggestionsAdapter);
    
            MenuItem searchItem = menu.add(0, 0, 0, "search");
            searchItem.setIcon(R.drawable.abs__ic_search);
            searchItem.setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM | MenuItem.SHOW_AS_ACTION_COLLAPSE_ACTION_VIEW);
            searchItem.setActionView(searchView);
        }
    
        @Override
        public boolean onOptionsItemSelected(MenuItem item) {
            switch (item.getItemId()) {
            case 1:
                ToastUtil.showShortToast(MainActivity.this, "分享");
                break;
            case 3:
                ToastUtil.showShortToast(MainActivity.this, "更换主题");
                break;
            case 4:
                ToastUtil.showShortToast(MainActivity.this, "系统设置");
                break;
            case 5:
                ToastUtil.showShortToast(MainActivity.this, "修改密码");
                break;
            case 6:
                ToastUtil.showShortToast(MainActivity.this, "更换头像");
                break;
            }
            return super.onOptionsItemSelected(item);
        }
    
        /***
         * implements SearchView.OnQueryTextListener
         */
        @Override
        public boolean onQueryTextSubmit(String query) {
            ToastUtil.showShortToast(this, "You searched for: " + query);
            return true;
        }
    
        /***
         * implements SearchView.OnQueryTextListener
         */
        @Override
        public boolean onQueryTextChange(String newText) {
            return false;
        }
    
        /**
         * implements SearchView.OnSuggestionListener
         */
        @Override
        public boolean onSuggestionSelect(int position) {
            return false;
        }
    
        /**
         * implements SearchView.OnSuggestionListener
         */
        @Override
        public boolean onSuggestionClick(int position) {
            Cursor c = (Cursor) mSuggestionsAdapter.getItem(position);
            String query = c.getString(c.getColumnIndex(SearchManager.SUGGEST_COLUMN_TEXT_1));
            ToastUtil.showShortToast(this, "Suggestion clicked: " + query);
            return true;
        }
    
    }

    /*******************************************************************************************************************************/

    QuerySuggestionsAdapter

    package com.hsx.wangcuo.adapter;
    
    import android.app.SearchManager;
    import android.content.Context;
    import android.database.Cursor;
    import android.support.v4.widget.CursorAdapter;
    import android.view.LayoutInflater;
    import android.view.View;
    import android.view.ViewGroup;
    import android.widget.TextView;
    
    public class QuerySuggestionsAdapter extends CursorAdapter {
    
        public QuerySuggestionsAdapter(Context context, Cursor c) {
            super(context, c, 0);
        }
    
        @Override
        public View newView(Context context, Cursor cursor, ViewGroup parent) {
            LayoutInflater inflater = LayoutInflater.from(context);
            View v = inflater.inflate(android.R.layout.simple_list_item_1, parent, false);
    
            return v;
        }
    
        @Override
        public void bindView(View view, Context context, Cursor cursor) {
            TextView tv = (TextView) view;
            final int textIndex = cursor.getColumnIndex(SearchManager.SUGGEST_COLUMN_TEXT_1);
            tv.setText(cursor.getString(textIndex));
        }
    }

    效果图如下:

    device-2014-03-18-164601

    还有一个小的bug,没有找到解决方法:输入一个字母的时候,不弹出提示

    device-2014-03-18-164645

    demo的地址 :   http://download.csdn.net/detail/abc13939746593/7061035

  • 相关阅读:
    在win8.1 64位环境下有关Oracle的安装和卸载
    动手又动脑
    二柱子四则运算(课堂练习)
    Java学生成绩绩点管理系统
    小学期第八周收获
    小学期第七周收获
    小学期第六周收获
    小学期第五周收获
    《大道至简》读后感
    小学期第四周收获
  • 原文地址:https://www.cnblogs.com/hsx514/p/3608245.html
Copyright © 2011-2022 走看看