Member 12657113 Ответов: 1

Как получить алфавитные записи в listview ?


Я попытался изменить запрос в порядке возрастания, но все равно вывод не в алфавитном порядке.
Ниже приводится следующее MainActivity.java файл:

пакет com.пример.пользователей.телефонный справочник;

импорт андроид.приложение.ListActivity;
импорт android.content.ContentResolver;
импорт android.content.Контекст;
импорт android.content.CursorLoader;
импорт android.database.Указатель;
импорт android.net.Ури;
импорт android. os. Build;
импорт android. os. Bundle;
импорт android.provider.ContactsContract;
импорт android. util. Log;
импорт андроид.смотреть.LayoutInflater;
импорт андроид.смотреть.Смотреть;
импорт андроид.смотреть.ViewGroup;
импорт android. widget.Адаптер массива;
импорт android. widget.TextView;



импорт java. util.Коллекции;
импорт java. util.Коллекции;

public class MainActivity расширяет ListActivity {

ArrayList< contact> контакты;

@Ручная коррекция
protected void onCreate(Bundle savedInstanceState) {
super. onCreate(savedInstanceState);
setContentView(R. layout.activity_main);

контакты = новый ArrayList & lt;contact>();

Uri allContacts = ContactsContract.Контакты.CONTENT_URI;

//объявить курсор
Курсор с;

String [] projection = новая строка[]
{ContactsContract.Контакты._ИДЕНТИФИКАТОР,
ContactsContract.Контакты.ОТОБРАЖАЕМОЕ ИМЯ,
ContactsContract.Контакты.HAS_PHONE_NUMBER};


если (Build.Версия. SDK_INT < 11) {
//- - - если устройство работает на ОС до Honeycomb
//используйте managedQuery () класса Activity для извлечения управляемого курсора
c = managedQuery(allContacts, projection, null, null, null);

} еще {
//- - - Honeycomb и более поздние версии используют класс cursor loader для извлечения управляемого курсора---
CursorLoader cursorLoader = новый CursorLoader(
этот,
allContacts,
проекция,
нулевой,
нулевой,
нулевой);
с = cursorLoader.метода loadinbackground();
}

PrintContacts(с);

Адаптер MyClassAdapter;


// снова обнаружьте версию android..
если (Build.Версия. SDK_INT < 11) {
//- - - если это перед сотами---

адаптер = новый MyClassAdapter(
это, R. layout.row_line, контакты);
} еще {
// - - - Соты и более поздние версии---

адаптер = новый MyClassAdapter(
это, R. layout.row_line, контакты);
}

this. setListAdapter(адаптер);


}

частные пустые PrintContacts (курсор c) {
ContentResolver cr = getContentResolver();
// - - - отображение идентификатора контакта, имени и номера телефона----
если (c. moveToFirst()) {
делать {
//- - - получить идентификатор контакта и имя
Строковый идентификатор contactid = гр.и getString(ок. getColumnIndex(
ContactsContract.Контакты.Параметр _id));
Строка contactDisplayName =
c. getString(c. getColumnIndex(
ContactsContract.Контакты.ОТОБРАЖАЕМОЕ ИМЯ));
Войти.в("контент-провайдеров", идентификатор contactid + ", " +
contactDisplayName);

Строка contactDisplayPhone = "";
//- - - получить номер телефона---
int HASP =
гр.для данного locale(ок. getColumnIndex(
ContactsContract.Контакты.HAS_PHONE_NUMBER));
если (HASP == 1) {
Курсор phoneCursor =
getContentResolver (). query(
ContactsContract.CommonDataKinds.Телефон.CONTENT_URI, null, null
, null, ContactsContract.CommonDataKinds.Телефон.DISPLAY_NAME + " ASC");
пока (phoneCursor.moveToNext()) {
Log. v ("контент-провайдеры",
contactDisplayPhone = phoneCursor. getString(
phoneCursor.getColumnIndex(
ContactsContract.CommonDataKinds.Телефон.НОМЕР)));
}
phoneCursor.рядом();

}
contacts. add (новый контакт(contactDisplayName, contactDisplayPhone));

} в то время как (гр.moveToNext());
}
}



контакт с публичным классом {
публичная строка contactName = "";

публичная строка contactNumber = "";

публичный контакт(имя строки, номер строки) {

contactName = имя;

contactNumber = номер;
}
}

public class MyClassAdapter расширяет ArrayAdapter & lt;contact> {

частный класс ViewHolder {
личное имя TextView;
частный номер TextView;
}

public MyClassAdapter(Context context, int textViewResourceId, ArrayList & lt;contact> items) {
super (context, textViewResourceId, items);
}

getView адаптера публичного представления(положение int, вид convertView, ViewGroup родителя) {
ViewHolder viewHolder;
if (convertView = = null) {
convertView = LayoutInflater. from(this. getContext())
.надуть(Р. макета.row_line, родитель, ложь);

viewHolder = новый ViewHolder();
viewHolder.name = (TextView) convertView.findViewById(R. id. contactName);

viewHolder.кол = (виджет TextView) convertView.команду findViewById(Р. ИД.contactNumber);

convertView. setTag(viewHolder);
} еще {
viewHolder = (ViewHolder) convertView. getTag();
}

Контактный элемент = getItem(позиция);
if (item != null) {
viewHolder.имя.помощью setText(пункт.контактантами);

viewHolder.количество.помощью setText(пункт.contactNumber);
}

return convertView;
}
}

}

Что я уже пробовал:

я тоже попробовал SimpleCursorAdapter, хотя в этом случае записи были в алфавитном порядке, но номера телефонов не были видны. вы можете перейти по этой ссылке: http://stackoverflow.com/questions/38618185/how-should-i-solve-the-issue-of-duplicate-contact-names-and-phone-numbers-not-vi

Richard MacCutchan

Вероятно, вам нужно скопировать контакты в какой-то тип списка, который обеспечит функцию сортировки. Затем вы можете найти любые дубликаты и удалить их.

1 Ответов

Рейтинг:
2

Richard MacCutchan

Видеть Коллекция / Разработчики Android[^] для потенциальных типов коллекций.