前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布

搜索

作者头像
六月的雨
发布2022-01-17 20:11:08
6790
发布2022-01-17 20:11:08
举报
文章被收录于专栏:Android开发指南Android开发指南

搜索

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
复制
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 删除。

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
短信
腾讯云短信(Short Message Service,SMS)可为广大企业级用户提供稳定可靠,安全合规的短信触达服务。用户可快速接入,调用 API / SDK 或者通过控制台即可发送,支持发送验证码、通知类短信和营销短信。国内验证短信秒级触达,99%到达率;国际/港澳台短信覆盖全球200+国家/地区,全球多服务站点,稳定可靠。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档