博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
ActionBar中SearchView创建的2种方式
阅读量:5752 次
发布时间:2019-06-18

本文共 4734 字,大约阅读时间需要 15 分钟。

hot3.png

功能:查找通讯录 -- 输入关键字进行检索

效果图示例:

202533_Icht_2542711.png

202533_wrFD_2542711.png

202533_eyiq_2542711.png

1、现在清单配置里添加查找联系人的 权限 READ_CONTACTS

2、在res下创建一个menu菜单文件夹

菜单文件夹中菜单的布局main_menu.xml  -- 2种SearchView的创建方式

代码

<?xml version="1.0" encoding="utf-8"?>

<menu xmlns:android="http://schemas.android.com/apk/res/android" >

<!-- 方式1:actionViewClass -->

    <item

        android:id="@+id/seachView"

        android:actionViewClass="android.widget.SearchView"

        android:showAsAction="always"

        android:title=""/>

    <!-- 方式2:actionLayout

    加 | 表示 有多个属性 collapseActionView 表示折叠起来该视图 -->

    <item

        android:id="@+id/custom_seachView"

        android:actionLayout="@layout/item_activity"

        android:showAsAction="always|collapseActionView"

        android:icon=" :drawable/ic_menu_compass"

        android:title=""/>

</menu>

==============

3、res/layout界面有2个布局一个主布局(ListView显示电话和联系人)一个item布局(SearchView自定义布局)

activity_main.xml 布局

代码

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"

    xmlns:tools="http://schemas.android.com/tools"

    android:layout_width="match_parent"

    android:layout_height="match_parent"

    tools:context="${relativePackage}.${activityClass}" >

    <ListView

        android:id="@+id/listview"

        android:layout_width="match_parent"

        android:layout_height="match_parent"/>

</RelativeLayout>

-----------------------

item_activity.xml 布局

代码

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

    xmlns:tools="http://schemas.android.com/tools"

    android:layout_width="match_parent"

    android:layout_height="match_parent"

   android:orientation="horizontal" >

    <EditText

        android:id="@+id/edit_text"

        android:layout_width="0dp"

        android:layout_weight="1"

        android:layout_height="match_parent"/>

    

    <Button

        android:id="@+id/bt_id"

        android:layout_width="wrap_content"

        android:layout_height="match_parent"

        android:text="检索"/>

</LinearLayout>

==========================

4、MainActivity类

代码

//实现LoaderCallbacks接口

public class MainActivity extends FragmentActivity implements LoaderCallbacks<Cursor> {

private ListView listView;

private SearchView searchView;

private SimpleCursorAdapter adapter;//游标适配器

private LoaderManager loaderManager;

//联系人通讯录路径

private String url_phone = "content://com.android.contacts/data/phones";

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

this.listView = (ListView) this.findViewById(R.id.listview);

//this.editId = (EditText) this.findViewById(R.id.edit_text);

//只检索通讯录的名字和电话

adapter = new SimpleCursorAdapter(this, android.R.layout.simple_list_item_1, null,

new String[] { "display_name", "data1" }, new int[] {

android.R.id.text1,android.R.id.text2},

CursorAdapter.FLAG_REGISTER_CONTENT_OBSERVER);

listView.setAdapter(adapter);

loaderManager = getSupportLoaderManager();

loaderManager.initLoader(1, null, this);

}

//======================LoaderCallbacks接口要重写的方法=======================

@Override//创建加载器

public Loader<Cursor> onCreateLoader(int id, Bundle bundle) {

if (bundle != null) {

String keywords = bundle.getString("keywords");

return new CursorLoader(this, Uri.parse(url_phone), new String[] {

"_id","display_name", "data1" },

"display_name like ? or data1 like ?", new String[] {

keywords + "%", keywords + "%" }, null);

return new CursorLoader(this, Uri.parse(url_phone), new String[] {

"_id","display_name", "data1" }, null, null, null);

}

@Override//加载器创建完成

public void onLoadFinished(Loader<Cursor> loader, Cursor cursor) {

adapter.swapCursor(cursor);

}

@Override

public void onLoaderReset(Loader<Cursor> loader) {

adapter.swapCursor(null);

}

//选择菜单

@Override

public boolean onCreateOptionsMenu(Menu menu) {

getMenuInflater().inflate(R.menu.main_menu, menu);

MenuItem item = menu.findItem(R.id.seachView);//Android自带检索

searchView = (SearchView) item.getActionView();

//通过setOnQueryTextListener方法来监听

searchView.setOnQueryTextListener(new OnQueryTextListener() {

@Override

public boolean onQueryTextSubmit(String query) {

return false;

}

@Override

public boolean onQueryTextChange(String keywords) {

Bundle bundle = new Bundle();

bundle.putString("keywords", keywords);//用户输入要检索的内容为keywords

//从新查找一遍 -- 调用onCreateLoader方法

//参数1 -- 加载器标记(有该标记加载器就不创建 否则就创建)

//参数2 -- Bundle

loaderManager.restartLoader(1, bundle, MainActivity.this);

return false;

}

});

//自定义自动检索

View custom_searchView = menu.findItem(R.id.custom_seachView).getActionView();

final EditText editId = (EditText) custom_searchView.findViewById(R.id.edit_text);

custom_searchView.findViewById(R.id.bt_id).setOnClickListener(new OnClickListener() {

@Override

public void onClick(View v) {

String edit_contact = editId.getText().toString();

Bundle bundle = new Bundle();

bundle.putString("keywords", edit_contact);

loaderManager.restartLoader(1, bundle, MainActivity.this);

}

});

return super.onCreateOptionsMenu(menu);

}

}

转载于:https://my.oschina.net/u/2542711/blog/613501

你可能感兴趣的文章
JAVA的对象复制
查看>>
jquery要怎么写才能速度最快?(转)
查看>>
cisco设备IOS上传、备份、设置启动IOS
查看>>
打开Office报错
查看>>
我的友情链接
查看>>
AsyncTask简易使用
查看>>
关于PHP sessions的超时设置
查看>>
HAProxy负载均衡原理及企业级实例部署haproxy集群
查看>>
开源中国动弹客户端实践(三)
查看>>
Win 8创造颠覆性体验:预览版关键更新
查看>>
vim在多文件中复制粘贴内容
查看>>
Android ContentObserver
查看>>
文章“关于架构优化和设计,架构师必须知道的事情”
查看>>
疯狂java学习笔记1002---非静态内部类
查看>>
ISA2006实战系列之一:实战ISA三种客户端部署方案(上)
查看>>
TCP服务器
查看>>
OCS和GLPI 安装文档
查看>>
U-Mail邮件系统与泛微OA系统一体化操作指南
查看>>
AC旁挂三层交换机管理ap,二层接入ap心得
查看>>
DC/OS虚拟网络
查看>>