Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具

搜索

作者头像
六月的雨
发布于 2022-01-17 12:11:08
发布于 2022-01-17 12:11:08
72700
代码可运行
举报
文章被收录于专栏:Android开发指南Android开发指南
运行总次数:0
代码可运行

搜索

1.在res/xml/下创建searchable.xml文件

label

hint

* 注意:值不能直接写字符串,必须指向一个资源ID,例如@string/search_sms

2.创建SearchActivity

在manifest文件中配置activity中的信息

<activity>

<intent-filter>

<action name />

</intent-filter>

<meta-data

name

resource />

</activity>

3.为了能让整个应用都可以调出搜索框,在application节点中配置

<meta-data android:name="android.app.default_searchable"

android:value=".SearchableActivity" />

4.通过onSearchRequested()方法调出搜索框

5.在SearchableActivity中获取Intent,获取SearchManager.QUERY参数的值

进行搜索,搜索完之后获得Cursor,绑定数据

6.如果想要类似AutoCompleteTextView的效果需要自定义一个Provider,详细步骤如下:

step1: 自定义一个Provider实现SearchRecentSuggestionsProvider

step2: 在searchable.xml文件中加以下属性:

searchSuggestAuthoritysearchSuggestSelection

step3: 在自定义的Provider的无参构造函数中调用setupSuggestions

step4: 重写query方法,查询短信数据库.

step5: 对查询出来的Cursor游标定义系统认识的别名

其中列值对应的分别是:

BaseColumns._ID,

SearchManager.SUGGEST_COLUMN_TEXT_1,

SearchManager.SUGGEST_COLUMN_TEXT_2,

SearchManager.SUGGEST_COLUMN_QUERY

最后return Cursor

SearchActivity

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public class SearchActivity extends ListActivity{
     
    private ListView listView;
     
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
         
        listView = getListView();
         
         // 通过intent 获得,在搜索框中输入的内容 ,系统固定格式
        Intent intent = getIntent();
        if (Intent.ACTION_SEARCH.equals(intent.getAction())) {
          query = intent.getStringExtra(SearchManager.QUERY);
           
          System.out.println("query::"+query);
           
          adapter = new  SearchListAdapter(this, null);
           listView.setAdapter(adapter);
           
          doMySearch(query);
        }
         
    }
    private void doMySearch(String query) {
        MyQueryHandler myQueryHandler = new MyQueryHandler(getContentResolver());
         
        myQueryHandler.startQuery(99, adapter, MyConstants.URI_SMS, projection, " body like '%"+query+"%'", null, "date desc");
         
    }
     
    private String[] projection={
            "_id","address","body","date"
            };
     
    private final int INDEX_ADDRESS=1;
    private final int INDEX_BODY=2;
    private final int INDEX_DATE=3;
     
    private SearchListAdapter adapter;
    private String query;
     
    class SearchListAdapter extends CursorAdapter{
        public SearchListAdapter(Context context, Cursor c) {
            super(context, c);
             
        }
        @Override
        public View newView(Context context, Cursor cursor, ViewGroup parent) {
            View view  = View.inflate(context, R.layout.list_item_search, null);
            ViewHolder vh = new ViewHolder();
             
            vh.face = (ImageView) view.findViewById(R.id.iv_face_list_item);
            vh.address = (TextView) view.findViewById(R.id.tv_address_list_item);
            vh.body = (TextView) view.findViewById(R.id.tv_body_list_item);
            vh.date = (TextView) view.findViewById(R.id.tv_date_list_item);
            view.setTag(vh);
             
            return view;
        }
        @Override
        public void bindView(View view, Context context, Cursor cursor) {
            ViewHolder vh = (ViewHolder) view.getTag();
             
            vh.body.setText(cursor.getString(INDEX_BODY));
             
            String dateStr = DateFormat.getDateFormat(context).format(cursor.getLong(INDEX_DATE));
            vh.date.setText(dateStr);
             
            String number = cursor.getString(INDEX_ADDRESS);
            String name = Tools.findNameByNumber(context, number);
            if(name == null){
                vh.address.setText(number);
            }else{
                vh.address.setText(name);
            }
             
            int id = Tools.findIDByNumber(context, number);
            if(id==-1){
                vh.face.setBackgroundResource(R.drawable.ic_unknow_contact_picture);
            }else{
                 
                Bitmap bitmap = Tools.getFaceById(context, ""+id);
                if(bitmap == null){
                    vh.face.setBackgroundResource(R.drawable.ic_contact_picture);
                }else{
                    vh.face.setBackgroundDrawable(new BitmapDrawable(bitmap));
                }
            }
        }
         
    }
     
    class ViewHolder{
         
        public ImageView face;
        public TextView address;
        public TextView body;
        public TextView date;
         
    }
     
}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2015-11-25 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
3.CursorAdapter
会话页面 点击菜单时编辑的按钮显示,其余的时候gone ConversationUI public class ConversationUI extends Activity impleme
六月的雨
2018/05/14
1.4K0
高仿支付界面实现
效果 实现步骤 绘制支付界面布局 传递支付界面事件 核心代码 创建自定义布局 继承 RelativeLayout绘制界面 //view布局 View view = View.inflate(context, R.layout.layout_popup_bottom, null); valueList = new ArrayList<Map<String, String>>(); tvList = new TextView[6]; //初始化控件 tvCancel=(Image
对话、
2022/02/22
8080
高仿支付界面实现
Android ListView几种Adapter用法简介「建议收藏」
ListView是Android软件开发中十分常用也十分重要的一个UI控件。ListView的每一个子项可以是一个简单的字符串,也可以是一组View的组合,开发者完全可以根据自己的需求来定义显示的形式。
全栈程序员站长
2022/09/15
1.3K0
Android ListView几种Adapter用法简介「建议收藏」
4.TableLayout、回调接口
会话详情页 listview条目布局 TableLayout是一行几列的意思 <LinearLayout xmlns:android="http://schemas.android.com/apk/r
六月的雨
2018/05/14
1.2K0
6.listview显示不用条目
文件夹页面 布局只有一个listview,可以继承listactivity,这样少写一个布局文件 tool: * @param index 箱子的索引值 * @return * 对应的uri 或
六月的雨
2018/05/14
8390
ListView详解
当然还有其他adapter。个人认为至少掌握这两种。只是字符串就用ArrayAdapter,用到图文混排的就用自定义的
提莫队长
2019/02/21
1.2K0
Android ListView 的简单用法
ListView 用来显示一个可以垂直滚动的列表,其中列表的每一项由其相关联的适配器提供,适配器起到一个中间人的作用,即连接列表数据和ListView布局
全栈程序员站长
2022/09/15
4720
Android ListView 的简单用法
笔记21 | 学习整理开源APP(BaseAnimation)程序源码“中的通讯录效果(二)
1.前言 整理学习”Android动画效果集合开源APP(BaseAnimation)程序源码“中的通讯录效果。 前人栽树:duguang 博客地址:http://blog.csdn.net/dugu
项勇
2018/06/19
5520
android listview 单选功能
实现的思路是 用一个 map 保存下刚才选择的position  item, 在adapter里面 设置  选中状态的时候  从 map里面获取。再次点击选择其他position的item的时候,将map中上一次 保存的 position的item删掉,最后一次点击的position 在每次点击的时候用一个单独的变量保存。  在点击事件里面重新notify当前 adapter 。
再见孙悟空_
2023/02/10
5690
手机上使用google 搜索引擎[通俗易懂]
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
全栈程序员站长
2022/10/01
1K0
ListView中实现部分刷新的两种方法
ListView在开发中用到的地方非常多,我们经常是全部刷新来更新数据,如果只需要更新某一条数据,该怎么实现呢?我在项目中使用过以下两种方法:
全栈程序员站长
2022/09/06
1.2K0
ListView中实现部分刷新的两种方法
Android之控件与布局,结构知识点,基础完结
在Android中我们常常用到很多UI控件,如TextView,EditText,ImageView,Button,ImageButton,ToggleButton,CheckBox,RadioButton等等这些可以自己多用就会了。
达达前端
2019/07/03
1.2K0
Android之控件与布局,结构知识点,基础完结
Android 入门程序 Kotlin版(2)
ListView的用法介绍。 2个组件, TextView,ListView依次纵向线性布局。 ViewItem的布局,左边图片,右边文字水平排列: <?xml version="1.0" encod
用户6021899
2021/02/19
2900
Android 入门程序 Kotlin版(2)
7.数据库、Contentobserver
群组页是程序内部维护的一个数据库,其中一张表groups,用于存放创建的群组,还有一张表thread_group,用于关联群组和系统短信数据库中的会话。 数据库应该这样设计 MySqliteHelpe
六月的雨
2018/05/14
9140
7.首页、bitmaputils
HomeProtocol public class HomeProtocol extends BaseProtocol<List<AppInfo>>{ // 1 把整个json文件写到一个本地文件中 ** // 2 把每条数据都摘出来存到数据库中 // 见到大括号 就用JsonObject ,见到中括号就是JsonArray public List<AppInfo> paserJson(String json) { List<AppInfo> appInfos=new ArrayList<
六月的雨
2018/05/14
1K0
android学习笔记----短信发送器
短信发送器demo地址:https://github.com/liuchenyang0515/SmsSend
砖业洋__
2023/05/06
4990
android学习笔记----短信发送器
从0系统学Android--3.5 最常用和最难用的控件---ListView
ListView 是我们在开发中最常使用的控件之一。由于手机屏幕空间比较有限,能够一次性在屏幕上显示的内容不多,ListView 允许用户可以通过手指上下滑动,可以呈现更多的数据。
开发者
2019/12/26
6260
从0系统学Android--3.5 最常用和最难用的控件---ListView
[android] 开启新的activity获取他的返回值
应用场景:打开一个新的activity,在这个activity上获取数据,返回给打开它的界面
唯一Chat
2019/09/10
1.2K0
[android] 开启新的activity获取他的返回值
Android UI学习之ListView(使用BaseAdapter)
ListView是手机系统中使用非常广泛的一种组件,它以垂直列表的形式显示所以列表项。
DragonKingZhu
2022/05/08
4660
Android UI学习之ListView(使用BaseAdapter)
相关推荐
3.CursorAdapter
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验