zoukankan      html  css  js  c++  java
  • Android核心功能开发SearchView使用的开发(代码共享)

          在Android上。搜索是一个核心的用户功能。用户可以搜索可用的任何数据,的内容是否存储在设备本身或者需要促进网络接入上。Android它提供了一个框架,为用户创造一个一致的搜索的搜索体验,它可以帮你实现搜索应用程序。

    搜索框架提供两种搜索模式:一个搜索对话框(Search Dialog)位于搜索屏幕的顶部或窗体小部件(SearchView),能够将其嵌入到你的布局中。在这两种情况下,Android系统将帮助你搜索实现交付运行搜索的任务给一个特定的Activity。

    效果例如以下图所看到的。

           当用户须要运行一个搜索的搜索对话框或搜索小部件,系统创建一个Intent和存储用户Query,然后系统会启动你事先声明的用于运行数据查找的Activity,,使用它进行数据搜寻。总共须要下面三个步骤。

    (1)建立一个Search.XML文件在res/xml文件里

         一个XML文件,配置一些search dialog或widget的设置。

    它包含设置特性,比方语音搜索,搜索建议和提示文本搜索框。

    <?xml version="1.0" encoding="utf-8"?>
    <searchable xmlns:android="http://schemas.android.com/apk/res/android"
        android:label="@string/app_label"
        android:hint="@string/search_hint" >
    </searchable>

     (2)声明一个SearchActivity

              这个Activiy接收搜索用户的数据,并显示搜索结果。

    特别注意的是为了使调用的Activity找到这个SearchActivity,你必须首先声明Android搜索Activitydao到你的清单文件。

    例如以下所看到的。

    <application ... >
        <activity android:name=".SearchableActivity" >
            <intent-filter>
                <action android:name="android.intent.action.SEARCH" />
            </intent-filter>
            <meta-data android:name="android.app.searchable"
                       android:resource="@xml/searchable"/>
        </activity>
        ...
    </application>

      SearchActivity要完毕下面三个步骤。1 接收查询 2 搜索您的数据3 展示结果。

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.search);
        handleIntent(getIntent());
    }
    
    @Override
    protected void onNewIntent(Intent intent) {
        setIntent(intent);
        handleIntent(intent);
    }
    
    private void handleIntent(Intent intent) {
        if (Intent.ACTION_SEARCH.equals(intent.getAction())) {
          String query = intent.getStringExtra(SearchManager.QUERY);
          doMySearch(query);
        }
    }

         之前看博客又看到有人说onNewIntent()不知道几时促发的。我研究了下官方文档上面是这么写的。假设我们将android:launchMode设置为“singleTop”,然后SerachActivity接收ACTION_SEARCH intent 会调用 onNewIntent()方法。

    (3)建立一个搜索界面

       搜索界面包括两种类型SearchDialog和SearchWidget。SerachDialog:默认情况下,搜索对话框隐藏,我们通过调用onSearchRequested()(当用户按搜索button)让他显示在屏幕上端,SearchWidget :同意用户将搜索框放在布局的任何位置,但通常须要跟actionbar结合。

      搜索界面的Activity也须要在清单文件声明

      <activity android:name=".OtherActivity" ... >
            <!-- enable the search dialog to send searches to SearchableActivity -->
            <meta-data android:name="android.app.default_searchable"
                       android:value=".SearchableActivity" />
        </activity>
    

        public class OtherActivity extends Activity{  
            private Button mStartSearch;  
            @Override  
            protected void onCreate(Bundle savedInstanceState) {  
                super.onCreate(savedInstanceState);  
                setContentView(R.layout.search_invoke);  
                //就一个button  
                mStartSearch = (Button)findViewById(R.id.btn_start_search);  
                //启动搜索框  
                mStartSearch.setOnClickListener(new OnClickListener() {  
                    @Override  
                    public void onClick(View v) {  
                        onSearchRequested();  
                    }  
                });  
            }  
          
                //重写onSearchRequested方法  
            @Override  
            public boolean onSearchRequested() {  
                       //除了输入查询的值,还可额外绑定一些数据  
                Bundle appSearchData = new Bundle();  
                appSearchData.putString("demo_key","text");  
                  
                startSearch(null, false, appSearchData, false);   
                        //必须返回true。

    否则无效数据绑定 return true; } }



  • 相关阅读:
    Simpo
    Numpy技巧
    流程图
    注册免费试用12个月的亚马逊AWS云计算服务
    java-Collection
    CoreGraphic
    吴裕雄--天生自然python学习笔记:python 用pygame模块开发俄罗斯方块游戏
    吴裕雄--天生自然python学习笔记:python 用pygame模块检测键盘事件和鼠标事件
    吴裕雄--天生自然python学习笔记:python 用pygame模块角色类(Sprite)移动与碰撞
    吴裕雄--天生自然python学习笔记:python 用pygame模块动画一让图片动起来
  • 原文地址:https://www.cnblogs.com/gcczhongduan/p/5032729.html
Copyright © 2011-2022 走看看