效果
从联系人拿到的数据
实时筛选
代码:
- Xml文件:
<?xml version="1.0" encoding="utf-8"?>
<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="vertical"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="com.ryan.gdin.myapplication.MainActivity">
<android.support.v7.widget.SearchView
android:id="@+id/sv_test"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
<ListView
android:id="@+id/lv_contatc"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
</LinearLayout>
- 读取联系人权限:
<uses-permission android:name="android.permission.READ_CONTACTS"/>
- Java代码:
public class MainActivity extends AppCompatActivity implements SearchView.OnQueryTextListener {
static final String[] PROJECTION = new String[]{ContactsContract.RawContacts._ID,
ContactsContract.RawContacts.DISPLAY_NAME_PRIMARY};
private Cursor mCursor;
private SimpleCursorAdapter mAdapter;
private SearchView mSearchView;
private ListView mListView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mSearchView = (SearchView) findViewById(R.id.sv_test);
mListView = (ListView) findViewById(R.id.lv_contatc);
mSearchView.setSubmitButtonEnabled(true);
mSearchView.setOnQueryTextListener(this);
initDataView();
}
private void initDataView() {
mCursor = getContentResolver().query(ContactsContract.RawContacts.CONTENT_URI, PROJECTION, null, null, null);
mAdapter = new SimpleCursorAdapter(this, android.R.layout.simple_list_item_1, mCursor,
new String[]{ContactsContract.RawContacts.DISPLAY_NAME_PRIMARY}, new int[]{android.R.id.text1}, 0);
mListView.setAdapter(mAdapter);
}
@Override
public boolean onQueryTextSubmit(String query) {
if (mSearchView != null) {
// 得到输入管理对象
InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
if (imm != null) {
// 这将让键盘在所有的情况下都被隐藏,但是一般我们在点击搜索按钮后,输入法都会乖乖的自动隐藏的。
imm.hideSoftInputFromWindow(mSearchView.getWindowToken(), 0); // 输入法如果是显示状态,那么就隐藏输入法
}
mSearchView.clearFocus(); // 不获取焦点
}
return true;
}
@Override
public boolean onQueryTextChange(String newText) {
String selection = ContactsContract.RawContacts.DISPLAY_NAME_PRIMARY + " LIKE '%" + newText + "%' " + " OR "
+ ContactsContract.RawContacts.SORT_KEY_PRIMARY + " LIKE '%" + newText + "%' ";
// String[] selectionArg = { queryText };
mCursor = getContentResolver().query(ContactsContract.RawContacts.CONTENT_URI, PROJECTION, selection, null, null);
mAdapter.swapCursor(mCursor); // 交换指针,展示新的数据
return true;
}
}
此至,抛砖引玉,见笑啦!