Recyclerview具有来自其他对象内的对象的2个布局

时间:2016-04-15 08:10:29

标签: android android-recyclerview recycler-adapter

我有一个对象列表,每个对象都有一个对象列表。 对于每个对象,我想在recyclerView中制作2个不同的layoutet行。 一个布局,直接来自对象的字符串,并遵循对象列表中每个项目的另一个布局

伪代码

Object main:字符串名称,列表记录;

对象记录:字符串游戏,int记录;

输出:

main(0).name - (布局1)

main(0).record(0).game - (布局2)

main(0).record(1).game - (布局2)

main(1).name - (布局1)

main(1).record(0) - (布局2)

main(1).record(1) - (布局2)

我可以用一个对象来做,但是当我有两个或更多主要对象时,无法正确理解逻辑。

代码:

    @Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
    RecyclerView.ViewHolder viewHolder = null;
    LayoutInflater inflater = LayoutInflater.from(parent.getContext());
    switch(viewType){
        case 0:{
            View v = inflater.inflate(R.layout.list_item_1, parent, false);
            viewHolder = new MyViewHolder(v);
            break;
        }
        case 1:{
            View v = inflater.inflate(R.layout.list_item_2, parent, false);
            viewHolder = new ViewHolderTo(v);
            break;
        }
    }
    return viewHolder;
}

@Override
public void onBindViewHolder(final RecyclerView.ViewHolder holder, final int position) {


        switch (holder.getItemViewType()) {
            case 0: {
                model = mList.get(holder.getAdapterPosition());
                MyViewHolder viewHolder = (MyViewHolder) holder;
                viewHolder.name.setText(model.getName());
                break;
            }
            case 1: {
                ViewHolderTo viewholder = (ViewHolderTo) holder;
                viewholder.ting.setText(model.getRecords().get(position-1).getGame());
                break;
            }
        }
    }

@Override
public int getItemViewType(int position) {
    int tmp;

    if(position==0||position==3||position==6){
         return 0;
    } else{
        return 1;
    }

}

@Override
public int getItemCount() {
    int count = 0;
    for(MyListModel item: mList){
        count += item.getRecords().size();
        count++;
    }
    return count;
}

希望这里有一些更敏锐的大脑:-) 如果您需要更多代码,请告诉我

工作代码。 Thx to Luksprog

@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
    RecyclerView.ViewHolder viewHolder = null;
    LayoutInflater inflater = LayoutInflater.from(parent.getContext());
    switch(viewType){
        case 0:{
            View v = inflater.inflate(R.layout.list_item_1, parent, false);
            viewHolder = new MyViewHolder(v);
            break;
        }
        case 1:{
            View v = inflater.inflate(R.layout.list_item_2, parent, false);
            viewHolder = new ViewHolderTo(v);
            break;
        }
    }
    return viewHolder;
}

@Override
public void onBindViewHolder(final RecyclerView.ViewHolder holder, final int position) {

    int[] pos = mapToRealPositions(position);
    model = mList.get(pos[0]);

    switch (holder.getItemViewType()) {
        case 0: {
            MyViewHolder viewHolder = (MyViewHolder) holder;
            viewHolder.name.setText(model.getName());
            break;
        }
        case 1: {
            ViewHolderTo viewholder = (ViewHolderTo) holder;
            viewholder.ting.setText(model.getRecords().get(pos[1]).getGame());
            break;
        }
    }
}

@Override
public int getItemViewType(int position) {
    int tmp;

    if(position==0||position==3||position==21){
        return 0;
    } else{
        return 1;
    }

}

@Override
public int getItemCount() {
    int count = 0;
    for(MyListModel item: mList){
        count += item.getRecords().size();
        count++;
    }
    return count;
}

// this method will return an int array with two values, first value will be the position of the main item in mList, the second
// value will be the position of the child(in the records list) in the maim item
public int[] mapToRealPositions(int recyclerPos) {
    int reference = 0;
    for(int i = 0; i < mList.size(); i ++) {
        final int childNr = mList.get(i).getRecords().size();
        if (recyclerPos < reference + 1 + childNr) {
            return new int[]{i, recyclerPos - reference - 1};
        } else {
            reference += 1 + childNr;
        }
    }
    return null;
}
}

0 个答案:

没有答案