использовать автозаполнение просмотра текста с контактным номером телефона - PullRequest
5 голосов
/ 27 января 2012

У меня автоматическое заполнение поля edittext для телефонных номеров контактов. Я знаю, как получить контакты из базы данных и отобразить их в текстовом поле, но мне нужно, чтобы они автозаполнялись, только если пользователь хочет ввести имя в текстовое поле. Я понимаю, как получить массив для автоматического завершения и вся теория за этим. Но как вытащить из телефона контакты сложно. Я видел много учебников, а также различные вопросы о переполнении стека, но все еще немного озадачен. Фрагмент кода поможет, пожалуйста.

public class MyContacts extends Activity {

    AutoCompleteTextView txtPhoneNo;

    public ArrayList<String> c_Name = new ArrayList<String>();
    public ArrayList<String> c_Number = new ArrayList<String>();
    String[] name_Val = null;
    String[] phone_Val = null;

    @Override
    public void onCreate(Bundle icicle) {
        super.onCreate(icicle);
        txtPhoneNo = (AutoCompleteTextView) findViewById(R.id.txtPhoneNo);

    }

    Uri contacts = Uri.parse("content://icc/adn");
    ContentResolver cr = getContentResolver();

    Cursor managedCursor1 = cr.query(contacts, null, null, null, null);
    {
        if (managedCursor1.moveToFirst()) {

            String contactname;
            String cphoneNumber;

            int nameColumn = managedCursor1.getColumnIndex("name");
            int phoneColumn = managedCursor1.getColumnIndex("number");

            Log.d("int Name", Integer.toString(nameColumn));
            Log.d("int Number", Integer.toString(phoneColumn));

            do {
                // Get the field values
                contactname = managedCursor1.getString(nameColumn);
                cphoneNumber = managedCursor1.getString(phoneColumn);
                if ((contactname != " " || contactname != null)
                        && (cphoneNumber != " " || cphoneNumber != null)) {

                    c_Name.add(contactname);
                    c_Number.add(cphoneNumber);
                }

            } while (managedCursor1.moveToNext());
        }
        name_Val = (String[]) c_Name.toArray(new String[c_Name.size()]);
        phone_Val = (String[]) c_Number.toArray(new String[c_Name.size()]);
        ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
                android.R.layout.simple_dropdown_item_1line, name_Val);
        txtPhoneNo.setAdapter(adapter);
    }
}

Мой код ... нет ошибок компиляции, но все равно не работает

Ответы [ 2 ]

3 голосов
/ 27 января 2012

Лучше было бы получить контакты и сохранить их в ArrayList. Затем вы можете просто связать ArrayList с AutoComplete TextView. Тогда оставшаяся часть будет легко фильтровать ArrayList, когда вы вводите текст в AutoComplete TextView.

UPDATE

Вы можете создать класс POJO с помощью getter-setter contact_name и contact_number. Затем создайте List<POJO> list = new ArrayList<POJO>();. Затем просто добавьте contact_name и contact_number к list, используя POJO class

POJO pojo_obj = new POJO();
pojo_obj.setcontact_name(contactname);
pojo_obj.setcontact_number(cphoneNumber);
list.add(pojo_obj);

И, наконец, установите list на Adapter.

А затем в классе Adapter вы можете установить его в TextView, используя

list.get(position).getcontact_name();
list.get(position).getcontact_number();
0 голосов
/ 18 февраля 2012

Я думаю, что вы тестируете в SDK. SDK не имеет SIM-карты и, следовательно, не будет работать. Вставьте .APK в телефон и попробуйте снова. Это должно работать как шарм.

...