2015-10-29 129 views
0

enter image description hereListView - 修改行布局

大家好!

我想创建一个具有相同行布局的listView。但我正在动态改变行的元素。从上面的图中,你可以看到我用行填充了我的listView,但是行的按钮将不得不根据行的类型而不同。行中的其余信息是相同的。

有没有一种方法,我可以通过一个标志到适配器,使其添加/删除布局基于行的类型的元素?我的适配器扩展为BaseAdapter

回答

1

是的,让你的ListView适配器在我的答案中采用一个包含一个标志的模型。 这应该工作,如果您正在使用解析器如GSON将您的JSON对象转换为特定的POJO。如果你想从JSON对象中加载你的适配器,我会建议你不要这么做,所以祝你好运。

public class Row{ 
private RowType rowType; 
//all other row attributes 
} 

public enum RowType{ 
YesNo, Cancel, //all other possible scenarios 
} 

public class YourAdapter extends BaseAdapter{ 
private List<Row> rowsToPopulate; 

//Override appropriate methods 

@Override 
public View getView(int position, View convertView, ViewGroup parent) { 
//load your view etc.... 

//Check the flag to load appropriate fragment 
switch(rowsToPopulate.get(position).getRowType()){ 
case YesNo: 
//Load your yes no fragment to your row view 
case Cancel: 
//Load your cancel fragment to your row view 
} 

return yourView; 
} 
1

此信息应该包含在适配器知道的模型中。

getView(..)方法中,您应该能够检查<model>.getType()是否是特定类型。如果是这样,您可以设置布局中特定组件的可见性并相应地更改UI。

如果类型不是响应的一部分,您可以在适配器内部保留Map<Model, Type>,并在有新数据时更新适配器,并且有一个方便的方法将其转换为模型对象列表以显示UI。