功能:查找通信錄 -- 輸入關鍵字進行檢索android
效果圖示例:ide
一、如今清單配置裏添加查找聯繫人的 權限 READ_CONTACTS佈局
二、在res下建立一個menu菜單文件夾this
菜單文件夾中菜單的佈局main_menu.xml -- 2種SearchView的建立方式url
代碼spa
<?xml version="1.0" encoding="utf-8"?>.net
<menu xmlns:android="http://schemas.android.com/apk/res/android" >rest
<!-- 方式1:actionViewClass -->xml
<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="@android :drawable/ic_menu_compass"
android:title=""/>
</menu>
==============
三、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>
==========================
四、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);
}
}