gpt4 book ai didi

android - 动态隐藏或显示 ListView 对应标题第一个字符的行中的 TextView

转载 作者:行者123 更新时间:2023-11-30 03:26:31 24 4
gpt4 key购买 nike

如果标题的第一个字符在列表中第一次匹配,我需要隐藏或显示 listView 行的标签。我附上可以帮助清楚地理解的图片。 enter image description here

我在创建联系人的 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;

}

但没有得到正确的结果。我还尝试将所有 View 放在自定义 ArrayAdapter 中,并在创建 listView 后进行更改,但它也没有帮助。在 getView 中检查标题和显示/隐藏标签也无济于事。将非常感谢任何帮助。

最佳答案

首先 - 记住“字母项目”应该在的所有位置。对于“a”,它很可能是 0,对于“b”=“a”开始的名称的数量,对于“c”=“b”的位置 +“b”开始的项目的数量等等。让它成为一个 String 类型的 SparseArray。

当你得到所有这些后,你应该将所有数据放入 SparseArray,其中每个项目 inex 将根据之前的计算进行调整。例如,Alex - 1(0 表示 'a'-label,),Bob - 3(2 表示 'b'-label)等等。

然后你编写自定义适配器并覆盖方法

public View getView(int position, View convertView, ViewGroup parent)

因此,就好像“位置”包含在第一个数组中一样,您返回带有正确后者的“标签” View ,否则,您将通过访问第二个数组获得一个公共(public)行项目。

英语不是我的母语,所以有些东西可能很难理解 - 不要犹豫,尽管提问。

关于android - 动态隐藏或显示 ListView 对应标题第一个字符的行中的 TextView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18139084/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com