タイトルの最初の文字がリストの最初の文字と一致した場合、listView の行のラベルを非表示または表示する必要があります。はっきりと理解するのに役立つ写真を添付します。
連絡先の ArrayList を作成するときに、このようにしようとしました:
public ArrayList<ContactItem> getDisplayContacts(Context context)
{
ArrayList<ContactItem> contactsList = null;
DatabaseHandler db = new DatabaseHandler(context.getApplicationContext());
try {
Dao<ContactItem,Integer> daoSubject = db.getContactDao();
contactsList = (ArrayList<ContactItem>) daoSubject.queryForAll();
}
catch(Exception e)
{e.printStackTrace();}
Collections.sort(contactsList, new Comparator<ContactItem>() {
@Override
public int compare(ContactItem lhs, ContactItem rhs) {
return lhs.getName().compareTo(rhs.getName());
}
});
for (int i =0; i< contactsList.size()-1;i++)
{
if (!contactsList.get(i).getName().substring(0,1).equalsIgnoreCase(contactsList.get(i+1).getName().substring(0,1)))
contactsList.get(i).setContactLabel(true);
else
contactsList.get(i).setContactLabel(false);
}
return contactsList;
}
しかし、適切な結果が得られませんでした。また、すべてのビューをカスタム ArrayAdapter に入れ、listView の作成後に変更しようとしましたが、これも役に立ちませんでした。getView でタイトルを確認し、ラベルを表示/非表示にすることも役に立ちませんでした。どんな助けにも非常に感謝します。