gpt4 book ai didi

android - 如何过滤两个长值的自定义 ListView?

转载 作者:行者123 更新时间:2023-11-29 00:33:18 27 4
gpt4 key购买 nike

我有带有自定义适配器的 ListView 扩展 ArrayAdapter。每一项都是对象:

public class ListItemObject {

public String messageText;
public long messageTime;
public long fromId;
public long toId;

}

我想在菜单中添加可检查项以进行过滤切换。因此,当此项目取消选中时,我将显示所有项目,当此项目检查时,ListView必须仅包含具有此条件的过滤项目:

if(fromId==myId || toId==myId) {
//show item
} else {
//don't show item
}

我看到了两种实现方式:

  1. 让我自己的过滤器扩展过滤器。然后调用 adapter.getFilter().filter(string_with_fromId_and_toId_in_JSON)。我在这里看到一个问题:所有外观适配器只能包含一个过滤器。如果我以后想添加另一个过滤器,我就做不到。

  2. 保存适配器外的所有项目,清除它并再次填充过滤后的数据。这对我来说不是很方便的方法,但我可以做到。

如何更好地实现这一点?

最佳答案

我都用过。我创建了一个标志,如 FILTER_BY_CUSTOM_COLLECTION 并将其作为 constraint 参数发送到过滤器函数。如果约束等于我的标志,我会执行自定义过滤器,否则我将该约束用作真实文本约束:

MyFilter filter = (MyFilter) adapterDocumentDetails.getFilter();

filter.itemsForFilterResult = anyCollection

filter.filter(MyFilter.FILTER_BY_CUSTOM_COLLECTION,
new FilterListener() {
@Override
public void onFilterComplete(int count) {

}
});

在我的过滤器中:

   public final static String FILTER_BY_CUSTOM_COLLECTION = "@@FILTER_BY_CUSTOM_COLLECTION@@";
@Override
protected FilterResults performFiltering(CharSequence constraint) {

if (constraint.toString().compareTo(
FILTER_BY_CUSTOM_COLLECTION) == 0
&& itemsForFilterResult != null)
{
filteredCollection = itemsForFilterResult;
}
else
{
for (int i = 0; i < allItems.size(); i++)
{
ListItemObject item= allItems.get(i);
if(item.messageText.contains(constraint))
{
filteredCollection.add(item);
}
}
}
}

关于android - 如何过滤两个长值的自定义 ListView?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14100183/

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