Я работаю над приложением ecommerce
, которое должно отображать варианты продуктов. Хороший пример, который я могу привести, - это phone
в данном случае, iPhone 7. Там может быть iphone 7
с16 ГБ, 32 ГБ, 128 ГБ встроенной памяти, 1 ГБ или 2 ГБ оперативной памяти, пробел серого цвета и т. Д. Мне нужно отобразить эту информацию в spinners
, и когда пользователь выбирает параметр e.g
пробел серого цвета, он должен фильтровать все остальные счетчики с параметрамидоступно для этого выбора, в нашем случае это означает удаление опции 128 ГБ, если в iphone 7 не выделено пространство серого цвета с объемом памяти 128 ГБ.
Мои данные выглядят так
{
"variants": [
{
....
"attributes":{"COLOR":"RED","RAM":"8GB","Storage":"256GB"}
},{
....
"attributes":{"COLOR":"WHITE","RAM":"8GB","Storage":"32B"}
},{
....
"attributes":{"COLOR":"BLACK", "RAM":"6GB","Storage":"128GB"}
}
]
}
Моя попытка былачтобы сначала заполнить эти данные счетчиками, для этого
//I had to create a list of all attributes
allAttributesImmutableList = FluentIterable.from(product.getVariants())
.transformAndConcat(new Function<Variant, List<Attribute>>() {
@NullableDecl
@Override
public List<Attribute> apply(@NullableDecl Variant variant) {
List<Attribute> allAttributes = new ArrayList<>();
for (String key : variant.getAttributes().keySet()) {
allAttributes.add(new Attribute(key, variant.getAttributes().get(key)));
}
return allAttributes;
}
}).toList();
//A list of Distinct keys to use as prompt for the spinners and keys
distinctAttributeKeys = ImmutableSet.copyOf(FluentIterable.from(allAttributesImmutableList)
.transform(Attribute::getAttr)
.toList());
return Lists.newArrayList(ImmutableSet.copyOf(FluentIterable.from(distinctAttributeKeys)
.transform(new Function<String, VariantGroup>() {
@NullableDecl
@Override
public VariantGroup apply(@NullableDecl String title) {
return VariantGroup.VariantGroupBuilder
.aVariantGroup()
.withTitle(title)
.withSpinnerAdapter(new ArrayAdapter<>(getContext(), R.layout.spinner_item, Lists.newArrayList(ImmutableSet.copyOf(FluentIterable.from(allAttributesImmutableList)
.transform(new Function<Attribute, String>() {
@NullableDecl
@Override
public String apply(@NullableDecl Attribute input) {
if(title.equals(input.getAttr()))
return input.getValue();
return null;
}
}).filter(Predicates.notNull())
.toList()))))
.build();
}
}).toList()));
VariantGroup is just the
title / key`` и всех доступных опций для этого ключа как SpinnerAdapter
public class VariantGroup {
private String title;
private SpinnerAdapter spinnerAdapter;
}
Это производит именно то, что я хочу, в итоге я получаю
Но теперь мне нужно запустить filter
spinners
, когдапользователь выбирает e.g
хранилище 256GB мне нужно отфильтровать все спиныПоказывать только опции для 25GB
Кто-нибудь, кто сделал что-то подобное?