Android09_SearchView联系人的索引快速(弹出)查询的实现
来源:互联网 发布:工匠精神与软件质量 编辑:程序博客网 时间:2024/05/21 22:27
1.SearchActivity:
package com.example.mycontacts3;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;
import android.app.Activity;
import android.content.ContentResolver;
import android.content.Intent;
import android.database.Cursor;
import android.os.Bundle;
import android.provider.ContactsContract;
import android.provider.ContactsContract.RawContacts;
import android.text.TextUtils;
import android.view.View;
import android.widget.LinearLayout;
import android.widget.ListView;
import android.widget.SearchView;
import android.widget.SearchView.OnQueryTextListener;
import android.widget.SimpleAdapter;
public class SearchActivity extends Activity implements OnQueryTextListener{
private Activity activity;
private ListView lv_search;
private SimpleAdapter adapter;
private LinearLayout show_content;
private String keyvalue=null;
private SearchView searchView;
private SearchView sear_contacts;
private String newText = "";
private Cursor c;
private ArrayList<Map<String, String>> list = new ArrayList<>();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_search);
sear_contacts = (SearchView) findViewById(R.id.sear_contacts);
lv_search = (ListView) findViewById(R.id.lv_search);
lv_search.setTextFilterEnabled(true); // 设置对字符串过滤 对应适配器
sear_contacts.setOnQueryTextListener(this);// 监听 SearchView 中的数据变化
sear_contacts.setSubmitButtonEnabled(true);// 监听 SearchView 的提交按钮
// 初始化界面要害死用这个方法
readRawContacts(newText);
}
public void backClick(View v) {
Intent intent = new Intent();
intent.setClass(SearchActivity.this, MainActivity.class);
startActivity(intent);
SearchActivity.this.finish();
}
public void readRawContacts(String newText) {
ContentResolver resolver = SearchActivity.this.getContentResolver();
// SQL 语句 SELECT * FROM `classify` WHERE NAME LIKE 's%'
// String sql=" like '"+newText+"%"+"'";
// "display_name="+sql+""
if(newText!=null){
c = resolver.query(ContactsContract.Contacts.CONTENT_URI,
new String[] { "_id", "display_name", "phonebook_label" },
"display_name like ?", new String[] { "%"+newText+"%" }, "phonebook_label");
}
else{
c = resolver.query(ContactsContract.Contacts.CONTENT_URI,
new String[] { "_id", "display_name", "phonebook_label" },
null, null, "phonebook_label");
}
//^_^ 主要 在第二次程序 加载数据前清空
list.clear();
while (c.moveToNext()) {
if (keyvalue == null
|| !keyvalue.equals(c.getString(c
.getColumnIndex("phonebook_label")))) {
Map<String, String> map = new HashMap<>();
map.put("name", c.getString(c.getColumnIndex("display_name")));
map.put("keyvalue", c.getString(c.getColumnIndex("phonebook_label")));
keyvalue = c.getString(c.getColumnIndex("phonebook_label"));
list.add(map);
} else {
Map<String, String> map = new HashMap<>();
map.put("name", c.getString(c
.getColumnIndex(RawContacts.DISPLAY_NAME_PRIMARY)));
keyvalue = c.getString(c.getColumnIndex("phonebook_label"));
System.out.println(c.toString());
System.out.println("name"+c.getString(c.getColumnIndex("display_name")));
System.out.println("keyvalue"+c.getString(c.getColumnIndex("phonebook_label")));
list.add(map);
}
adapter = new SimpleAdapter(this, list,
R.layout.my_layout,
new String[] { "name", "keyvalue" }, new int[] { R.id.tv_name,
R.id.tv_info });
lv_search.setAdapter(adapter);
//lv_search.removeAllViews();
// 在尾部 清空没用 list.clear();
}
}
@Override
public boolean onQueryTextSubmit(String query) {
lv_search.setFilterText(query.trim());
return false;
}
@Override
public boolean onQueryTextChange(String newText) {
if (TextUtils.isEmpty(newText)) {
// Clear the text filter.
lv_search.clearTextFilter();
} else {
// 有值 newText
// 自己定义的方法容易传递
readRawContacts(newText);
}
return false;
}
}
/*
* 这是自己之前做的,还是不成功,待会换成刘贤超的方法
* //lv_search = (ListView) findViewById(R.id.lv_search);
// 调用Frame2页面
// new Frame2();
fragmentManager = getSupportFragmentManager();
contentResolver = getContentResolver();
Cursor c = contentResolver.query(
ContactsContract.RawContacts.CONTENT_URI, new String[] { "_id",
"display_name", "phonebook_label" }, null, null,
"phonebook_label");
while (c.moveToNext()) {
if (keyvalue == null
|| !keyvalue.equals(c.getString(c
.getColumnIndex("phonebook_label")))) {
Map<String, String> map = new HashMap<>();
map.put("name", c.getString(c.getColumnIndex("display_name")));
map.put("keyvalue", c.getString(c.getColumnIndex("phonebook_label")));
keyvalue = c.getString(c.getColumnIndex("phonebook_label"));
list1.add(map);
} else {
Map<String, String> map = new HashMap<>();
map.put("name", c.getString(c
.getColumnIndex(RawContacts.DISPLAY_NAME_PRIMARY)));
keyvalue = c.getString(c.getColumnIndex("phonebook_label"));
list1.add(map);
}
SimpleAdapter adapter = new SimpleAdapter(activity, list1,
R.layout.my_layout, new String[] { "name", "keyvalue" },
new int[] { R.id.tv_name, R.id.tv_info });
lv_search.setAdapter(adapter);
}
*/
/*private void initMain() {
FragmentTransaction transaction = fragmentManager.beginTransaction();
transaction.add(R.id.lv_search, new Frame2(), "contacts");
transaction.commit();
}*/
/*
* 06-14 21:47:35.521: E/AndroidRuntime(1108): java.lang.RuntimeException:
* Unable to start activity
* ComponentInfo{com.example.mycontacts3/com.example
* .mycontacts3.SearchActivity}: java.lang.IllegalArgumentException: No view
* found for id 0x7f06000c (com.example.mycontacts3:id/show_content) for
* fragment Frame2{b2e210c8 #0 id=0x7f06000c contacts}
*/
2.activity_search.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"
android:layout_marginTop="0dp"
tools:context="${packageName}.${activityClass}" >
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:background="#FFFFFF" >
<LinearLayout
android:id="@+id/back"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:minHeight="50dp"
android:minWidth="50dp"
android:orientation="horizontal" >
<ImageView
android:id="@+id/iv_back"
android:layout_width="wrap_content"
android:layout_height="40dp"
android:background="#FFFFFF"
android:onClick="backClick"
android:layout_weight="1"
android:src="@drawable/ic_back_key2" />
<SearchView
android:id="@+id/sear_contacts"
android:layout_width="252dp"
android:layout_height="40dp"
android:layout_alignParentRight="true"
android:layout_toRightOf="@+id/iv_back"
android:background="#FFFFFF"
android:queryHint="查询联系人"
>
</SearchView>
</LinearLayout>
<ListView
android:id="@+id/lv_search"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@+id/iv_back"
android:layout_centerHorizontal="true"
android:layout_marginTop="0dp"
android:layout_weight="1"
android:background="#FFFFFF" >
</ListView>
</LinearLayout>
</RelativeLayout>
3.效果图如图所示:
还有那个其他的索引查询方式在csdn博客上也可以找到;推荐:http://blog.csdn.net/suichukexun/article/details/8116510
- Android09_SearchView联系人的索引快速(弹出)查询的实现
- Android仿微信实现快速索引选择联系人
- Android仿微信实现快速索引选择联系人
- Android自定义类似联系人列表的 快速索引控件
- 带搜索框及快速索引的联系人列表
- 快速索引的简单实现
- android快速索引的实现
- 联系人快速索引
- 手机联系人快速索引
- 浅谈android中手机联系人字母索引表的实现
- 浅谈android中手机联系人字母索引表的实现
- indexablerecyclerview 的使用体验(实现选择城市,选择联系人等需要索引的功能)
- 安卓 简单的 联系人快速检索控件QuickIndexBar实现
- 实现查询当前联系人应用中联系人的id和姓名
- 查询手机联系人的信息
- Androidstudio自定义控件,快速索引联系人的首字母条,效果图及代码详解
- 联系人字母索引实现
- 自定义联系人快速索引栏
- MFC 多线程及线程同步
- ios设计模式之一(MVC模式,单例模式)
- sql update触发器错误
- 数据库备份
- python multiprocessing socket server example
- Android09_SearchView联系人的索引快速(弹出)查询的实现
- 使用Oracle SQL Developer报错:Unable to find a Java Virtual Machine
- 自己写的单链表操作
- Mysql 按年度、季度、月度、周、日SQL统计查询
- 网站构建二
- 定制VideoView,自定义MediaController
- KissXML的简易教程
- Java中获取路径的各种方法
- 苑广阔:两万人退出低保不是政绩是失职