我有一个对象列表,每个对象都有一个对象列表。 对于每个对象,我想在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;
}
}