Как получить алфавитные записи в 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
Вероятно, вам нужно скопировать контакты в какой-то тип списка, который обеспечит функцию сортировки. Затем вы можете найти любые дубликаты и удалить их.