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

标签 android android-listview android-arrayadapter

我有带有自定义适配器的 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/

相关文章:

java - 完全无响应的 Android 自定义适配器

android - 数组适配器 : Change resource depending on item (Android)

android - 为什么我需要摇动手机才能获得正确的 "Compass-Data"?

android - 在Android中解析本地gpx文件

android - 用口味替换启动 Activity

java - 如何在 RecyclerView 的 ViewHolder 中正确实例化 mContentView,以避免空对象引用?

java - 从自定义Listview中获取所有ImageView

java - 无法尝试实现从查询中获取随机结果到 Firestore

android - 在 XML 中将 ListView Item 设置为 ScreenWidth 的一半

android - 如何删除 SQL 数据库上的行