Android 使用来自其他对象内部对象的2个布局的Recyclerview
我有一个对象列表,每个对象中都有一个对象列表。 对于每个对象,我想在一个recyclerView中创建两个不同的layoutet行。 一个布局,直接从对象中获取字符串,然后从对象中为列表中的每个项目遵循另一个布局 伪码 对象主:字符串名称,列表记录 对象记录:字符串游戏,int记录 输出: 主(0).名称-(布局1) 主(0)。记录(0)。游戏-(布局2) 主(0).记录(1).游戏-(布局2) 主管道(1).名称-(布局1) 主(1).记录(0)-(布局2) 主(1).记录(1)-(布局2) 我可以用一个对象来完成,但是当我有两个或更多的主对象时,逻辑就不正确了 代码: 希望这里有一些更敏锐的大脑:-) 如果您需要更多代码,请告诉我 工作代码。Thx至卢克斯普罗格Android 使用来自其他对象内部对象的2个布局的Recyclerview,android,android-recyclerview,Android,Android Recyclerview,我有一个对象列表,每个对象中都有一个对象列表。 对于每个对象,我想在一个recyclerView中创建两个不同的layoutet行。 一个布局,直接从对象中获取字符串,然后从对象中为列表中的每个项目遵循另一个布局 伪码 对象主:字符串名称,列表记录 对象记录:字符串游戏,int记录 输出: 主(0).名称-(布局1) 主(0)。记录(0)。游戏-(布局2) 主(0).记录(1).游戏-(布局2) 主管道(1).名称-(布局1) 主(1).记录(0)-(布局2) 主(1).记录(1)-(布局2)
@覆盖
public RecyclerView.ViewHolder onCreateViewHolder(视图组父级,int-viewType){
RecyclerView.ViewHolder ViewHolder=null;
LayoutInflater充气器=LayoutInflater.from(parent.getContext());
开关(视图类型){
案例0:{
视图v=充气机。充气(R.layout.list_item_1,父项,false);
viewHolder=新的MyViewHolder(v);
打破
}
案例1:{
视图v=充气机。充气(R.layout.list_item_2,父项,false);
viewHolder=新ViewHolderTo(v);
打破
}
}
返回视图持有者;
}
@凌驾
公共无效onBindViewHolder(最终RecyclerView.ViewHolder,最终整型位置){
int[]pos=mapToRealPositions(位置);
model=mList.get(位置[0]);
开关(holder.getItemViewType()){
案例0:{
MyViewHolder viewHolder=(MyViewHolder)holder;
viewHolder.name.setText(model.getName());
打破
}
案例1:{
ViewHolderTo viewholder=(ViewHolderTo)holder;
viewholder.ting.setText(model.getRecords().get(pos[1]).getGame());
打破
}
}
}
@凌驾
public int getItemViewType(int位置){
int tmp;
如果(位置==0 | |位置==3 | |位置==21){
返回0;
}否则{
返回1;
}
}
@凌驾
public int getItemCount(){
整数计数=0;
对于(MyListModel项:mList){
count+=item.getRecords().size();
计数++;
}
返回计数;
}
//此方法将返回一个包含两个值的int数组,第一个值是主项在mList中的位置,第二个值是主项在mList中的位置
//值将是子项(在记录列表中)在maim项目中的位置
公共int[]地图位置(int回收商){
int reference=0;
对于(int i=0;i
您能分享屏幕截图吗?您希望如何在回收器视图中显示布局?仅使用一个对象。假设下面的3行名称不同:-)问题是第一行来自主对象,第二行来自主对象。三,。线条来自主对象内的对象列表。接下来的3行也是主要对象和2-3。在适配器中,您应该有一个方法将回收器使用的“扩展”位置转换为相对于mList的位置(用于从mList提取模型),如下所示:public int getDataPosition(int recyclerposition){int reference=0;for(int i=0;i @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;
}
@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;
}
}