1
我想使用具有兩個不同行的RecyclerView來顯示類別。第一行是一個Parentcategory,應該表示爲Listheader。 Parentcategorys可以包含零個,一個或多個孩子,這些孩子應該代表父母以外的其他孩子。具有不同ViewRows的Android RecyclerView
我的數據存儲在一個看起來像這樣的ArrayAdapter中。 (核心範疇是ParentCategory同時列出代表孩子。
private ArrayMap<Category, List<Category>> categoryMap= new ArrayMap<>();
我已經搜查了很多,tryed很多,像this線程,或this one和this,但是這一切都沒有了工作。我
編輯:我的問題是數據無法正確顯示。例如:。 我有4個Parentcategories第二parentcategory有2個孩子
我的數據是這樣的
- 家長
- 家長
- 兒童
- 兒童
- 家長
- 家長
但我的列表顯示了這一點:
- 家長
- 家長
- 兒童
- 家長
我還試圖用ExpandableListView和列表視圖。但這不是我想要的。目前
我的適配器是這樣的:
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我是新來的,不知道如何描述我的問題。所有這些例子都提到覆蓋方法getItemViewType,但我不能區分視圖類型,因爲我已經將數據存儲在一個ArrayMap中。我沒有得到任何錯誤。但列表不顯示正確的數據。例如。我有一個包含4個parentCategorys的列表。第二個父母有2個孩子。該列表顯示3位父母和只有一個孩子。 – KingOA