Search code examples
javaandroidrealm

how filter list that add some filter and remove some in Realm java query


I have list show some stuff and every stuff has some tag. I want filter stuffs by all tags clicked and change filter by some tag deselect.

Below code show my implements methods that written for do it. But just filter list buy one tag!!! How can filter all tag selected ?

private OrderedRealmCollection<StuffPOJO> list;


@Override
public void onFiltersSelected(ArrayList<TagPojo> filters) {

}

@Override
public void onNothingSelected() {
    UpdateStuffList(list.where().findAllAsync());
}

@Override
public void onFilterSelected(TagPojo item) {
    ///just filter list buy last tag selected !!! 
    /// how can filter all tag selected?
    UpdateStuffList(list.where()
            .equalTo("tagList.id", item.getId())
            .findAllAsync());
}

@Override
public void onFilterDeselected(TagPojo item) {

}



@Override
public void UpdateTagList(OrderedRealmCollection<TagPojo> list) {
    tagAdapter = new Adapter(list);
}

@Override
public void UpdateStuffList(OrderedRealmCollection<StuffPOJO> list) {
    this.list = list;
    stuffAdapter.updateData(this.list);
}

Solution

  • You need to store all the filters somewhere:

    private List<TagPojo> filters = new ArrayList<>();
    
    @Override
    public void onFilterSelected(TagPojo item) {
        filters.add(item);
        String[] filterIds = filters.stream().map(f -> f.getId()).toArray(size -> new String[size]);
        UpdateStuffList(list.where()
            .in("tagList.id", filterIds )
            .findAllAsync());
    }
    
    @Override
    public void onFilterDeselected(TagPojo item) {
        // need to have a proper TagPojo.equals() for this
        filters.remove(item);
    }