Я хочу использовать Recyclerview с двумя разными строками, чтобы показывать категории. Первая строка является Parentcategory и должна быть представлена как Listheader. Parentcategorys может содержать ноль, один или несколько дочерних элементов, которые должны представлять другие, кроме родителя.Android RecyclerView с различными ViewRows
Мои данные хранятся в ArrayAdapter, который выглядит следующим образом. (The Key Категория является ParentCategory в то время как списки представляют ребенок.
private ArrayMap<Category, List<Category>> categoryMap= new ArrayMap<>();
Я искал много и судимые много, как в this нити или this one и this. Но все это не работает для . мне
Edit: Моя проблема заключается в том, что данные не отображаются корректно, например:.... у меня есть 4 Parentcategories Второй parentcategory имеет 2 детей
Мои данные выглядит следующим образом
- Родитель
- Родитель
- Детский
- Детский
- Родитель
- Родитель
Но мой список показывает это:
- Родитель
- Родитель
- Детский
- Родитель
Я также попытался использовать ExpandableListView и ListViews. Но этого я не хотел.
Мой адаптер выглядит в настоящее время следующим образом:
public class CategoryListAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
private static final int TYPE_HEADER = 0;
private static final int TYPE_ITEM = 1;
private ArrayMap<Category,List<Category>> categoryMap;
private Context context;
private ArrayList<Category> categoryArrayList;
public CategoryListAdapter(Context context, ArrayMap<Category, List<Category>> categoryMap) {
this.context = context;
this.categoryMap = categoryMap;
}
@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
Log.d("VIEWTYPE",""+viewType);
switch (viewType){
case TYPE_HEADER:
CategoryListParentBinding binding = DataBindingUtil.inflate(
LayoutInflater.from(parent.getContext()),
R.layout.category_list_parent, parent, false);
return new HeaderViewHolding(binding);
case TYPE_ITEM:
CategoryListChildBinding binding1 = DataBindingUtil.inflate(
LayoutInflater.from(parent.getContext()),
R.layout.category_list_child, parent, false);
return new ChildViewHolding(binding1);
}
throw new RuntimeException("there is no type that matches the type " + viewType + " + make sure your using types correctly");
}
@Override
public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
if(holder instanceof HeaderViewHolding){
CategoryListParentBinding parentBinding = ((HeaderViewHolding) holder).parentBinding;
parentBinding.setParentCategory(categoryMap.keyAt(position));
}
if(holder instanceof ChildViewHolding){
for(int i = 0; i<=categoryMap.valueAt(position).size()-1;i++){
CategoryListChildBinding childBindingBinding = ((ChildViewHolding) holder).childBinding;
childBindingBinding.setChildCategory(categoryMap.valueAt(position).get(i));
}
}
}
@Override
public int getItemViewType(int position) {
if(isPositionHeader(position))
return TYPE_HEADER;
return TYPE_ITEM;
}
private boolean isPositionHeader(int position) {
return categoryMap.valueAt(position).size() <= 0;
}
@Override
public int getItemCount() {
int count = categoryMap.size();
for(int i=0;i<=categoryMap.size()-1;i++){
count = count + categoryMap.valueAt(i).size();
}
return count;
}
static class HeaderViewHolding extends RecyclerView.ViewHolder {
CategoryListParentBinding parentBinding;
public HeaderViewHolding(CategoryListParentBinding parentBinding) {
super(parentBinding.categoryParentLayout);
this.parentBinding = parentBinding;
}
}
static class ChildViewHolding extends RecyclerView.ViewHolder {
CategoryListChildBinding childBinding;
public ChildViewHolding(CategoryListChildBinding childBinding) {
super(childBinding.categoryChildLayout);
this.childBinding = childBinding;
}
}
}
Может кто-нибудь мне помочь?
Неясно, в чем проблема, которую вы испытываете – Kuffs
«Не работает для меня» не является правильной инструкцией. Какая ошибка вы получаете или какое поведение вы видите? –
ooh ok sry i'am new here, и не знаю, как описать мою проблему. Все эти примеры упоминаются для перезаписывания метода getItemViewType, но я не могу различать типы представлений, потому что я сохранил свои данные в ArrayMap. Я не ошибаюсь. Но в списке не отображаются правильные данные. Например. У меня есть список с 4 родительскими категориями. Второй родитель имеет 2 детей. В списке указаны 3 родителя и только один ребенок. – KingOA