如何在android中从列表中搜索姓名?

如何在android中从列表中搜索姓名?,android,autocomplete,android-contacts,addressbook,Android,Autocomplete,Android Contacts,Addressbook,您好,我制作了一个android应用程序,我将所有通讯录联系人加载到一个列表中,在上面我放置了一个edittext,如果我输入任何字母表,那么它将给出列表中与该字母表相关的所有值,我尝试了如下操作,但不起作用 我的代码如下: autocompletemain.java package com.example.autocomplite; import java.util.ArrayList; import android.app.Activity; import android.content.

您好,我制作了一个android应用程序,我将所有通讯录联系人加载到一个列表中,在上面我放置了一个edittext,如果我输入任何字母表,那么它将给出列表中与该字母表相关的所有值,我尝试了如下操作,但不起作用

我的代码如下:

autocompletemain.java

package com.example.autocomplite;

import java.util.ArrayList;
import android.app.Activity;
import android.content.ContentResolver;
import android.content.Intent;
import android.database.Cursor;
import android.net.Uri;
import android.os.Bundle;
import android.provider.ContactsContract;
import android.provider.ContactsContract.Contacts;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.inputmethod.InputMethodManager;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.AutoCompleteTextView;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.AdapterView.OnItemSelectedListener;

public class AutocompleteMain extends Activity implements OnItemClickListener,
        OnItemSelectedListener {

    // Initialize variables

    int PICK_CONTACT = 1200;
    AutoCompleteTextView textView = null;
    private ArrayAdapter<String> adapter;

    // Store contacts values in these arraylist
    public static ArrayList<String> phoneValueArr = new ArrayList<String>();
    public static ArrayList<String> nameValueArr = new ArrayList<String>();

    EditText toNumber = null;
    String toNumberValue = "";

    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle bundle) {
        super.onCreate(bundle);

        setContentView(R.layout.autocomplete_main);

        final Button Send = (Button) findViewById(R.id.Send);

        // Initialize AutoCompleteTextView values

        textView = (AutoCompleteTextView) findViewById(R.id.toNumber);

        // Create adapter
        adapter = new ArrayAdapter<String>(this,
                android.R.layout.simple_dropdown_item_1line,
                new ArrayList<String>());
        textView.setThreshold(1);

        // Set adapter to AutoCompleteTextView
        textView.setAdapter(adapter);
        textView.setOnItemClickListener(this);

        // Read contact data and add data to ArrayAdapter
        // ArrayAdapter used by AutoCompleteTextView

        readContactData();

        /********** Button Click pass textView object ***********/
        Send.setOnClickListener(BtnAction(textView));

    }

    private OnClickListener BtnAction(final AutoCompleteTextView toNumber) {
        return new OnClickListener() {

            public void onClick(View v) {

                String NameSel = "";
                NameSel = toNumber.getText().toString();

                final String ToNumber = toNumberValue;

                if (ToNumber.length() == 0) {
                    Toast.makeText(getBaseContext(),
                            "Please fill phone number", Toast.LENGTH_SHORT)
                            .show();
                } else {

                    /*
                     * Toast.makeText(getBaseContext(),
                     * NameSel+" : "+toNumberValue, Toast.LENGTH_LONG).show();
                     */
                }

            }
        };
    }

    // Read phone contact name and phone numbers

    private void readContactData() {

        try {

            /*********** Reading Contacts Name And Number **********/

            String phoneNumber = "";
            ContentResolver cr = getBaseContext().getContentResolver();

            // Query to get contact name

            Cursor cur = cr.query(ContactsContract.Contacts.CONTENT_URI, null,
                    null, null, null);

            // If data data found in contacts
            if (cur.getCount() > 0) {

                Log.i("AutocompleteContacts", "Reading   contacts........");

                int k = 0;
                String name = "";

                while (cur.moveToNext()) {

                    String id = cur.getString(cur
                            .getColumnIndex(ContactsContract.Contacts._ID));
                    name = cur
                            .getString(cur
                                    .getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));

                    // Check contact have phone number
                    if (Integer
                            .parseInt(cur.getString(cur
                                    .getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER))) > 0) {

                        // Create query to get phone number by contact id
                        Cursor pCur = cr
                                .query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI,
                                        null,
                                        ContactsContract.CommonDataKinds.Phone.CONTACT_ID
                                                + " = ?", new String[] { id },
                                        null);
                        int j = 0;

                        while (pCur.moveToNext()) {
                            // Sometimes get multiple data
                            if (j == 0) {
                                // Get Phone number
                                phoneNumber = ""
                                        + pCur.getString(pCur
                                                .getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));

                                // Add contacts names to adapter
                                adapter.add(name);

                                // Add ArrayList names to adapter
                                phoneValueArr.add(phoneNumber.toString());
                                nameValueArr.add(name.toString());

                                j++;
                                k++;
                            }
                        } // End while loop
                        pCur.close();
                    } // End if

                } // End while loop

            } // End Cursor value check
            cur.close();

        } catch (Exception e) {
            Log.i("AutocompleteContacts", "Exception : " + e);
        }

    }

    @Override
    public void onItemSelected(AdapterView<?> arg0, View arg1, int position,
            long arg3) {
        // TODO Auto-generated method stub
        Log.d("AutocompleteContacts", "onItemSelected() position " + position);

    }

    @Override
    public void onNothingSelected(AdapterView<?> arg0) {
        // TODO Auto-generated method stub

        InputMethodManager imm = (InputMethodManager) getSystemService(INPUT_METHOD_SERVICE);
        imm.hideSoftInputFromWindow(getCurrentFocus().getWindowToken(), 0);

    }

    @Override
    public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) {
        // TODO Auto-generated method stub

        // Get Array index value for selected name
        int i = nameValueArr.indexOf("" + arg0.getItemAtPosition(arg2));

        // If name exist in name ArrayList
        if (i >= 0) {

            // Get Phone Number
            toNumberValue = phoneValueArr.get(i);

            InputMethodManager imm = (InputMethodManager) getSystemService(INPUT_METHOD_SERVICE);
            imm.hideSoftInputFromWindow(getCurrentFocus().getWindowToken(), 0);

            // Show Alert

            Intent it = new Intent(Intent.ACTION_PICK, Contacts.CONTENT_URI);

            startActivityForResult(it, PICK_CONTACT);

            /*
             * Toast.makeText(getBaseContext(),
             * "Position:"+arg2+" Name:"+arg0.getItemAtPosition
             * (arg2)+" Number:"+toNumberValue, Toast.LENGTH_LONG).show();
             */
            Log.d("AutocompleteContacts",
                    "Position:" + arg2 + " Name:"
                            + arg0.getItemAtPosition(arg2) + " Number:"
                            + toNumberValue);

        }

    }

    protected void onResume() {
        super.onResume();
    }

    protected void onDestroy() {
        super.onDestroy();
    }

}
package com.example.autocomplete;
导入java.util.ArrayList;
导入android.app.Activity;
导入android.content.ContentResolver;
导入android.content.Intent;
导入android.database.Cursor;
导入android.net.Uri;
导入android.os.Bundle;
导入android.provider.contacts合同;
导入android.provider.Contacts contract.Contacts;
导入android.util.Log;
导入android.view.view;
导入android.view.view.OnClickListener;
导入android.view.inputmethod.InputMethodManager;
导入android.widget.AdapterView;
导入android.widget.ArrayAdapter;
导入android.widget.AutoCompleteTextView;
导入android.widget.Button;
导入android.widget.EditText;
导入android.widget.Toast;
导入android.widget.AdapterView.OnItemClickListener;
导入android.widget.AdapterView.OnItemSelectedListener;
公共类AutocompleteMain扩展活动实现McClickListener,
OnItemSelectedListener{
//初始化变量
int PICK_触点=1200;
AutoCompleteTextView textView=null;
专用阵列适配器;
//将联系人值存储在这些arraylist中
public static ArrayList phoneValueArr=new ArrayList();
公共静态ArrayList nameValueArr=新ArrayList();
EditText-TonNumber=null;
字符串toNumberValue=“”;
/**在首次创建活动时调用*/
@凌驾
创建公共void(Bundle){
super.onCreate(bundle);
setContentView(R.layout.autocomplete_main);
最终按钮发送=(按钮)findViewById(R.id.Send);
//初始化AutoCompleteTextView值
textView=(AutoCompleteTextView)findViewById(R.id.tonNumber);
//创建适配器
适配器=新阵列适配器(此,
android.R.layout.simple\u下拉列表\u项目\u 1行,
新的ArrayList());
设置阈值(1);
//将适配器设置为AutoCompleteTextView
setAdapter(适配器);
setOnItemClickListener(这个);
//读取联系人数据并将数据添加到ArrayAdapter
//AutoCompleteTextView使用的ArrayAdapter
readContactData();
/**********按钮单击传递文本视图对象***********/
Send.setOnClickListener(BtnAction(textView));
}
私有OnClickListener BtnAction(最终自动完成文本视图编号){
返回新的OnClickListener(){
公共void onClick(视图v){
字符串NameSel=“”;
NameSel=toNumber.getText().toString();
最终字符串ToNumber=toNumberValue;
if(ToNumber.length()=0){
Toast.makeText(getBaseContext(),
“请填写电话号码”,吐司。长度(短)
.show();
}否则{
/*
*Toast.makeText(getBaseContext(),
*NameSel+“:“+toNumberValue,Toast.LENGTH_LONG).show();
*/
}
}
};
}
//阅读电话联系人姓名和电话号码
private void readContactData(){
试一试{
/***********正在读取联系人姓名和号码**********/
字符串phoneNumber=“”;
ContentResolver cr=getBaseContext().getContentResolver();
//查询以获取联系人姓名
Cursor cur=cr.query(Contacts contract.Contacts.CONTENT\u URI,null,
空,空,空);
//如果在联系人中找到数据
如果(cur.getCount()>0){
Log.i(“自动完成联系人”、“读取联系人…”);
int k=0;
字符串名称=”;
while(cur.moveToNext()){
字符串id=cur.getString(cur
.getColumnIndex(Contacts contract.Contacts._ID));
name=cur
.getString(cur)
.getColumnIndex(Contacts contract.Contacts.DISPLAY_NAME));
//检查联系人是否有电话号码
if(整数
.parseInt(cur.getString(cur
.getColumnIndex(Contacts contract.Contacts.HAS_PHONE_NUMBER))>0){
//创建查询以按联系人id获取电话号码
光标pCur=cr
.query(contacts contract.commondatatypes.Phone.CONTENT\u URI、,
无效的
Contacts contract.CommonDataTypes.Phone.CONTACT\u ID
+“=?”,新字符串[]{id},
无效);
int j=0;
while(pCur.moveToNext()){
//有时会获取多个数据
如果(j==0){
//获取电话号码
phoneNumber=“”
+获取字符串(pCur
.getColumnIndex(ContactsContract.CommonDataTypes.Phone.NUMBER));
//将联系人名称添加到适配器
adapter.add(名称);
//将ArrayList名称添加到适配器
phoneValueArr.add(phoneNumber.toString());
nameValueArr.add(name.toString());
j++;
k++;
<?xml version="1.0" encoding="utf-8"?>
<TableLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
     >

    <TableRow>
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textSize="20px"
            android:text="Write character"
            android:layout_marginLeft="10dip"></TextView>
    </TableRow>      
    <TableRow>

        <AutoCompleteTextView
            android:id="@+id/toNumber"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_marginLeft="10dip"
            android:layout_marginRight="10dip"
            android:textColorHighlight="#000000"
            android:textColorLink="#000000"
            android:textStyle="bold"
            android:width="250dip" />

    </TableRow>
    <TableRow android:layout_marginTop="2dip">

        <Button android:id="@+id/Send"
                android:clickable="true"
                android:width="86dip"
                android:text="Show Selected Value"
                android:layout_gravity="center_vertical|center_horizontal"/> 
     </TableRow>

</TableLayout>