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





0 0
原创粉丝点击